home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / cg.lha / cg / src / Tree.mi < prev    next >
Text File  |  1992-11-24  |  69KB  |  2,369 lines

  1. IMPLEMENTATION MODULE Tree;
  2.  
  3.  
  4.  
  5.  
  6.  
  7. IMPORT SYSTEM, System, General, Memory, DynArray, IO, Layout, StringMem, Strings, Idents, Texts, Sets, Positions;
  8. (* line 143 "" *)
  9.  
  10.  
  11. FROM SYSTEM    IMPORT ADR, ADDRESS, TSIZE;
  12. FROM DynArray    IMPORT MakeArray;
  13. FROM IO        IMPORT tFile, StdOutput, ReadI, WriteS, WriteI, WriteC, WriteNl;
  14. FROM Strings    IMPORT tString, ArrayToString, Concatenate, Length, Char;
  15. FROM StringMem    IMPORT tStringRef, WriteString;
  16. FROM Idents    IMPORT tIdent, NoIdent, GetString, WriteIdent, MakeIdent, MaxIdent;
  17. FROM Texts    IMPORT tText, MakeText;
  18. FROM Sets    IMPORT tSet, Include, IsElement, MakeSet;
  19. FROM Relations    IMPORT tRelation, IsRelated, MakeRelation;
  20. FROM Positions    IMPORT tPosition;
  21.  
  22. IMPORT Relations, Errors;
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30. VAR IdentToClassPtr    : POINTER TO ARRAY [0..1000000] OF tTree;
  31. VAR IdentToClassSize    : LONGINT;
  32. VAR sIdentToClassSize    : tIdent;
  33.  
  34. PROCEDURE InitIdentifyClass (t: tTree);
  35.    VAR i: INTEGER;
  36.    BEGIN
  37.       IdentToClassSize := MaxIdent () + 1;
  38.       sIdentToClassSize := IdentToClassSize;
  39.       MakeArray (IdentToClassPtr, IdentToClassSize, TSIZE (tTree));
  40.       FOR i := 0 TO IdentToClassSize - 1 DO
  41.      IdentToClassPtr^ [i] := NoTree;
  42.       END;
  43.       ForallClasses (t, InitIdentifyClass2);
  44.    END InitIdentifyClass;
  45.  
  46. PROCEDURE InitIdentifyClass2 (t: tTree);
  47.    BEGIN
  48.       IdentToClassPtr^ [t^.Class.Name] := t;
  49.    END InitIdentifyClass2;
  50.  
  51. PROCEDURE IdentifyClass (t: tTree; Ident: tIdent): tTree;
  52.    BEGIN
  53.       IF Ident < sIdentToClassSize THEN RETURN IdentToClassPtr^ [Ident]; END;
  54.       RETURN NoTree;
  55.    END IdentifyClass;
  56.  
  57. PROCEDURE IdentifyAttribute (t: tTree; Ident: tIdent): tTree;
  58.    VAR attribute    : tTree;
  59.    BEGIN
  60.       LOOP
  61.      CASE t^.Kind OF
  62.      | Class:
  63.            attribute := IdentifyAttribute (t^.Class.BaseClass, Ident);
  64.            IF attribute # NoTree THEN RETURN attribute; END;
  65.            t := t^.Class.Attributes;
  66.             (* RETURN IdentifyAttribute (t^.Class.Attributes, Ident); *)
  67.      | Child:
  68.            IF t^.Child.Name = Ident THEN RETURN t; END;
  69.            t := t^.Child.Next;
  70.             (* RETURN IdentifyAttribute (t^.Child.Next, Ident); *)
  71.      | Attribute:
  72.            IF t^.Attribute.Name = Ident THEN RETURN t; END;
  73.            t := t^.Attribute.Next;
  74.             (* RETURN IdentifyAttribute (t^.Attribute.Next, Ident); *)
  75.      | ActionPart:
  76.            t := t^.ActionPart.Next;
  77.             (* RETURN IdentifyAttribute (t^.ActionPart.Next, Ident); *)
  78.      ELSE
  79.            RETURN NoTree;
  80.      END;
  81.       END;
  82.    END IdentifyAttribute;
  83.  
  84. PROCEDURE ForallClasses (t: tTree; Proc: ProcOfT);
  85.    BEGIN
  86.       WHILE t^.Kind = Class DO
  87.      Proc (t);
  88.      ForallClasses (t^.Class.Extensions, Proc);
  89.      t := t^.Class.Next;        (* ForallClasses (t^.Class.Next, Proc); *)
  90.       END;
  91.    END ForallClasses;
  92.  
  93. PROCEDURE ForallAttributes (t: tTree; Proc: ProcOfT);
  94.    BEGIN
  95.       LOOP
  96.      CASE t^.Kind OF
  97.      | Class:
  98.            ForallAttributes (t^.Class.BaseClass, Proc);
  99.            t := t^.Class.Attributes; (* ForallAttributes (t^.Class.Attributes, Proc); *)
  100.      | Child:
  101.            Proc (t);
  102.            t := t^.Child.Next;    (* ForallAttributes (t^.Child.Next, Proc); *)
  103.      | Attribute:
  104.            Proc (t);
  105.            t := t^.Attribute.Next;    (* ForallAttributes (t^.Attribute.Next, Proc); *)
  106.      | ActionPart:
  107.            Proc (t);
  108.            t := t^.ActionPart.Next;    (* ForallAttributes (t^.ActionPart.Next, Proc); *)
  109.      ELSE
  110.            RETURN;
  111.      END;
  112.       END;
  113.    END ForallAttributes;
  114.  
  115. PROCEDURE Error (ErrorCode: INTEGER; Pos: tPosition);
  116.    BEGIN
  117.       Errors.ErrorMessage (ErrorCode, Errors.Error, Pos);
  118.       INC (ErrorCount);
  119.    END Error;
  120.  
  121. PROCEDURE Warning (ErrorCode: INTEGER; Pos: tPosition);
  122.    BEGIN
  123.       Errors.ErrorMessage (ErrorCode, Errors.Warning, Pos);
  124.    END Warning;
  125.  
  126. PROCEDURE Information (ErrorCode: INTEGER; Pos: tPosition);
  127.    BEGIN
  128.       Errors.ErrorMessage (ErrorCode, Errors.Information, Pos);
  129.    END Information;
  130.  
  131. PROCEDURE ErrorI (ErrorCode: INTEGER; Pos: tPosition; iClass: INTEGER; iPtr: ADDRESS);
  132.    BEGIN
  133.       Errors.ErrorMessageI (ErrorCode, Errors.Error, Pos, iClass, iPtr);
  134.       INC (ErrorCount);
  135.    END ErrorI;
  136.  
  137. PROCEDURE WarningI (ErrorCode: INTEGER; Pos: tPosition; iClass: INTEGER; iPtr: ADDRESS);
  138.    BEGIN
  139.       Errors.ErrorMessageI (ErrorCode, Errors.Warning, Pos, iClass, iPtr);
  140.    END WarningI;
  141.  
  142. PROCEDURE InformationI (ErrorCode: INTEGER; Pos: tPosition; iClass: INTEGER; iPtr: ADDRESS);
  143.    BEGIN
  144.       Errors.ErrorMessageI (ErrorCode, Errors.Information, Pos, iClass, iPtr);
  145.    END InformationI;
  146.  
  147. PROCEDURE WI (i: tIdent); BEGIN WriteIdent (f, i); END WI;
  148.  
  149. PROCEDURE WE (i: tIdent);
  150.    VAR s: tString; Ch: CHAR; j: SHORTCARD;
  151.    BEGIN
  152.       GetString (i, s);
  153.       FOR j := 1 TO Length (s) DO
  154.          Ch := Char (s, j);
  155.          IF (Ch = '{') OR (Ch = '}') OR (Ch = '\') THEN WriteC (f, '\'); END;
  156.          WriteC (f, Ch);
  157.       END;
  158.    END WE;
  159.  
  160. PROCEDURE WN (n: INTEGER); BEGIN WriteI (f, n, 0); END WN;
  161.  
  162. (* line 417 "" *)
  163.  
  164.  
  165. VAR
  166.    DummySet    : tSet;
  167.    DummyRelation: tRelation;
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179. (* IF NOT Test *)
  180.  
  181.  
  182. (* *)
  183. (* IF Test
  184.    # define readtText(a)        yyReadHex (a);
  185.    # define writetText(a)        yyWriteHex (a);
  186.    # define puttText(a)        yyPut (a);
  187.    # define gettText(a)        yyGet (a);
  188.    # define writetSet(a)        yyWriteHex (a);
  189.    # define readtSet(a)        yyReadHex (a);
  190.    # define puttSet(a)        yyPut (a);
  191.    # define gettSet(a)        yyGet (a);
  192.    # define readtRelation(a)    yyReadHex (a);
  193.    # define writetRelation(a)    yyWriteHex (a);
  194.    # define puttRelation(a)    yyPut (a);
  195.    # define gettRelation(a)    yyGet (a);
  196. *)
  197.  
  198. PROCEDURE BeginTree2;
  199.    VAR Word    : tString;
  200.    BEGIN
  201.       WITH TreeRoot^.Ag DO
  202.      IF ParserName = NoIdent THEN
  203.         ArrayToString ("Parser"    , Word); ParserName    := MakeIdent (Word);
  204.      END;
  205.      IF TreeName = NoIdent THEN
  206.         ArrayToString ("Tree"    , Word); TreeName    := MakeIdent (Word);
  207.      END;
  208.      IF EvalName = NoIdent THEN
  209.         ArrayToString ("Eval"    , Word); EvalName    := MakeIdent (Word);
  210.      END;
  211.      IF ViewName = NoIdent THEN ViewName := TreeName; END;
  212.      GetString (TreeName, ModuleName);
  213.      iMain := TreeName;
  214.       END;
  215.       ArrayToString ("t" , Word); Concatenate (Word, ModuleName); itTree  := MakeIdent (Word);
  216.       ArrayToString ("No", Word); Concatenate (Word, ModuleName); iNoTree := MakeIdent (Word);
  217.       ArrayToString ("Position"        , Word); iPosition    := MakeIdent (Word);
  218.       ArrayToString ("tPosition"    , Word); itPosition    := MakeIdent (Word);
  219.  
  220.       IF SubUnit = NoIdent THEN
  221.      iModule := iMain;
  222.       ELSE
  223.      iModule := SubUnit;
  224.      Include (Options, ORD ('<'));
  225.       END;
  226.    END BeginTree2;
  227.  
  228. PROCEDURE IdentifyModule (t: tTree; Ident: tIdent): tTree;
  229.    VAR module    : tTree;
  230.    BEGIN
  231.       IF t^.Kind = Module THEN
  232.      IF t^.Module.Name = Ident THEN RETURN t; END;
  233.      RETURN IdentifyModule (t^.Module.Next, Ident);
  234.       ELSE
  235.      RETURN NoTree;
  236.       END;
  237.    END IdentifyModule;
  238.  
  239. PROCEDURE WriteInstance (i: tInstance);
  240.    BEGIN
  241.       WITH i DO
  242.          WriteS  (StdOutput, " ");
  243.      WriteName (i);
  244.      WriteS  (StdOutput, "    ");
  245.      WriteI  (StdOutput, Attribute^.Child.Partition, 0);
  246.      WriteS  (StdOutput, " ");
  247.      WriteAttrProperties (StdOutput, Properties + Attribute^.Child.Properties);
  248.      WriteNl (StdOutput);
  249.       END;
  250.    END WriteInstance;
  251.  
  252. PROCEDURE WriteName (i: tInstance);
  253.    BEGIN
  254.       WITH i DO
  255.      IF (Selector # NoTree) AND (Right IN Properties) THEN
  256.         WriteIdent (StdOutput, Selector^.Child.Name);
  257.         WriteS     (StdOutput, ":");
  258.      END;
  259.  
  260.      IF Attribute # NoTree THEN
  261.         WriteIdent (StdOutput, Attribute^.Child.Name);
  262.      END;
  263.       END;
  264.    END WriteName;
  265.  
  266. PROCEDURE WriteAttrProperties (f: tFile; Properties: tAttrProperties);
  267.    BEGIN
  268.       IF Virtual    IN Properties THEN WriteS (f, "Virtual "    ); END;
  269.       IF Computed    IN Properties THEN WriteS (f, "Computed "    ); END;
  270.       IF Reverse    IN Properties THEN WriteS (f, "Reverse "    ); END;
  271.       IF Write        IN Properties THEN WriteS (f, "Write "    ); END;
  272.       IF Read        IN Properties THEN WriteS (f, "Read "    ); END;
  273.       IF Inherited    IN Properties THEN WriteS (f, "Inherited "    ); END;
  274.       IF Synthesized    IN Properties THEN WriteS (f, "Synthesized "    ); END;
  275.       IF Input        IN Properties THEN WriteS (f, "Input "    ); END;
  276.       IF Output        IN Properties THEN WriteS (f, "Output "    ); END;
  277.       IF Tree        IN Properties THEN WriteS (f, "Tree "    ); END;
  278.       IF Parameter    IN Properties THEN WriteS (f, "Parameter "    ); END;
  279.       IF Stack        IN Properties THEN WriteS (f, "Stack "    ); END;
  280.       IF Variable    IN Properties THEN WriteS (f, "Variable "    ); END;
  281.       IF Demand        IN Properties THEN WriteS (f, "Demand "    ); END;
  282.       IF Funct        IN Properties THEN WriteS (f, "Function "    ); END;
  283.       IF Ignore        IN Properties THEN WriteS (f, "Ignore "    ); END;
  284.       IF Thread        IN Properties THEN WriteS (f, "Thread "    ); END;
  285.       IF Test        IN Properties THEN WriteS (f, "Test "    ); END;
  286.       IF Left        IN Properties THEN WriteS (f, "Left "    ); END;
  287.       IF Right        IN Properties THEN WriteS (f, "Right "    ); END;
  288.       IF CopyDef    IN Properties THEN WriteS (f, "CopyDef "    ); END;
  289.       IF CopyUse    IN Properties THEN WriteS (f, "CopyUse "    ); END;
  290.       IF NonBaseComp    IN Properties THEN WriteS (f, "NonBaseComp "    ); END;
  291.       IF MultInhComp    IN Properties THEN WriteS (f, "MultInhComp "    ); END;
  292.       IF First        IN Properties THEN WriteS (f, "First "    ); END;
  293.       IF Dummy        IN Properties THEN WriteS (f, "Dummy "    ); END;
  294.       IF Def        IN Properties THEN WriteS (f, "Def "    ); END;
  295.       IF Use        IN Properties THEN WriteS (f, "Use "    ); END;
  296.       IF ChildUse    IN Properties THEN WriteS (f, "ChildUse "    ); END;
  297.       IF ParentUse    IN Properties THEN WriteS (f, "ParentUse "    ); END;
  298.       IF Generated    IN Properties THEN WriteS (f, "Generated "    ); END;
  299.    END WriteAttrProperties;
  300.  
  301. PROCEDURE WriteClassProperties (f: tFile; Properties: tClassProperties);
  302.    BEGIN
  303.       IF Top        IN Properties THEN WriteS (f, "Top "    ); END;
  304.       IF Intermediate    IN Properties THEN WriteS (f, "Intermediate "    ); END;
  305.       IF Low        IN Properties THEN WriteS (f, "Low "    ); END;
  306.       IF Referenced    IN Properties THEN WriteS (f, "Referenced "    ); END;
  307.       IF Reachable    IN Properties THEN WriteS (f, "Reachable "    ); END;
  308.       IF Nonterminal    IN Properties THEN WriteS (f, "Nonterminal "    ); END;
  309.       IF Terminal    IN Properties THEN WriteS (f, "Terminal "    ); END;
  310.       IF Explicit    IN Properties THEN WriteS (f, "Explicit "    ); END;
  311.       IF Implicit    IN Properties THEN WriteS (f, "Implicit "    ); END;
  312.       IF Trace        IN Properties THEN WriteS (f, "Trace "    ); END;
  313.       IF String        IN Properties THEN WriteS (f, "String "    ); END;
  314.       IF HasSelector    IN Properties THEN WriteS (f, "HasSelector "    ); END;
  315.       IF HasChildren    IN Properties THEN WriteS (f, "HasChildren "    ); END;
  316.       IF HasAttributes    IN Properties THEN WriteS (f, "HasAttributes "    ); END;
  317.       IF HasActions    IN Properties THEN WriteS (f, "HasActions "    ); END;
  318.       IF Abstract    IN Properties THEN WriteS (f, "Abstract "    ); END;
  319.       IF Mark        IN Properties THEN WriteS (f, "Mark "    ); END;
  320.       IF HasOutput    IN Properties THEN WriteS (f, "HasOutput "    ); END;
  321.    END WriteClassProperties;
  322.  
  323. PROCEDURE WriteDependencies (t: tTree; r: tRelation; s: tSet);
  324.    VAR i, j, k, count    : SHORTCARD;
  325.    BEGIN
  326.       IF (t = NoTree) OR (r.Size1 # t^.Class.InstCount) THEN RETURN; END;
  327.       WriteIdent (StdOutput, t^.Class.Name);
  328.       WriteS (StdOutput, "    ");
  329.       WriteClassProperties (StdOutput, t^.Class.Properties);
  330.       WriteNl (StdOutput);
  331.       WriteNl (StdOutput);
  332.       FOR i := 1 TO t^.Class.InstCount DO
  333.          IF IsElement (i, s) AND NOT (Dummy IN t^.Class.Instance^ [i].Properties) THEN
  334.             WriteName (t^.Class.Instance^ [i]);
  335.             WriteS    (StdOutput, "    :");
  336.         count := 0;
  337.         k := 0;
  338.             FOR j := 1 TO t^.Class.InstCount DO
  339.            IF IsElement (j, s) AND IsRelated (i, j, r) THEN
  340.           IF count = 5 THEN
  341.              WriteNl (StdOutput);
  342.              WriteS  (StdOutput, "    ");
  343.              count := 0;
  344.           END;
  345.           WriteS    (StdOutput, " ");
  346.           WriteName (t^.Class.Instance^ [j]);
  347.           INC (count);
  348.           INC (k);
  349.            END;
  350.             END;
  351.         WriteS (StdOutput, " (");
  352.         WriteI (StdOutput, k, 0);
  353.         WriteS (StdOutput, ")");
  354.             WriteNl (StdOutput);
  355.          END;
  356.       END;
  357.       WriteNl (StdOutput);
  358.    END WriteDependencies;
  359.  
  360. PROCEDURE WriteCyclics        (t: tTree; s: tSet);
  361.    VAR i, count    : SHORTCARD;
  362.    BEGIN
  363.       count := 0;
  364.       FOR i := 1 TO t^.Class.InstCount DO
  365.      IF IsElement (i, s) THEN
  366.         IF count = 5 THEN
  367.            WriteNl (StdOutput);
  368.            count := 0;
  369.         END;
  370.         WriteName (t^.Class.Instance^ [i]);
  371.         WriteS    (StdOutput, " ");
  372.         INC (count);
  373.          END;
  374.       END;
  375.       WriteNl (StdOutput);
  376.    END WriteCyclics;
  377.  
  378. PROCEDURE WriteClass (t: tTree);
  379.    VAR i    : SHORTCARD;
  380.    BEGIN
  381.       CASE t^.Kind OF
  382.       | Class    : WITH t^.Class DO
  383.         WriteIdent    (StdOutput, Name);
  384.         WriteS    (StdOutput, " =");
  385.         WriteNl    (StdOutput);
  386.         ForallAttributes (t, WriteClass);
  387.         WriteNl    (StdOutput);
  388.         FOR i := 1 TO InstCount DO
  389.            WITH Instance^ [i] DO
  390.           IF Action # ADR (Action) THEN
  391.              IF Test IN Properties THEN
  392.             WriteName (Instance^ [i]);
  393.             WriteS    (StdOutput, ":");
  394.              END;
  395.              WriteS    (StdOutput, "    {");
  396.              WriteClass    (Action);
  397.              WriteS    (StdOutput, "}");
  398.              WriteNl    (StdOutput);
  399.           END;
  400.            END;
  401.         END;
  402.         WriteS    (StdOutput, ".");
  403.         WriteNl    (StdOutput);
  404.      END;
  405.       | Child    : WITH t^.Child DO
  406.         WriteS    (StdOutput, "    ");
  407.         WriteIdent    (StdOutput, Name);
  408.         WriteS    (StdOutput, ": ");
  409.         WriteIdent    (StdOutput, Type);
  410.         WriteNl    (StdOutput);
  411.      END;
  412.       | Attribute    : WITH t^.Attribute DO
  413.         WriteS    (StdOutput, "    [");
  414.         WriteIdent    (StdOutput, Name);
  415.         WriteS    (StdOutput, ": ");
  416.         WriteIdent    (StdOutput, Type);
  417.         WriteS    (StdOutput, "]");
  418.         WriteNl    (StdOutput);
  419.      END;
  420.       | Assign    : WITH t^.Assign DO
  421.         WriteClass    (Results);
  422.         WriteS    (StdOutput, ":=");
  423.         WriteClass    (Arguments);
  424.         WriteS    (StdOutput, ";");
  425.      END;
  426.       | Copy    : WITH t^.Copy DO
  427.         WriteClass    (Results);
  428.         WriteS    (StdOutput, " :- ");
  429.         WriteClass    (Arguments);
  430.         WriteS    (StdOutput, ";");
  431.      END;
  432.       | TargetCode    : WITH t^.TargetCode DO
  433.         IF Results^.Kind # NoDesignator THEN
  434.            WriteClass (Results);
  435.            WriteS      (StdOutput, ":= {");
  436.            WriteClass (Code);
  437.            WriteS      (StdOutput, "};");
  438.         END;
  439.      END;
  440.       | Order    : WITH t^.Order DO
  441.         WriteClass    (Results);
  442.         WriteS    (StdOutput, " AFTER ");
  443.         WriteClass    (Arguments);
  444.         WriteS    (StdOutput, ";");
  445.      END;
  446.       | Check    : WITH t^.Check DO
  447.         IF Condition # NoTree THEN
  448.            WriteS      (StdOutput, "CHECK ");
  449.            WriteClass (Condition);
  450.         END;
  451.         IF Statement # NoTree THEN
  452.            WriteS      (StdOutput, " => { ");
  453.            WriteClass (Statement);
  454.            WriteS      (StdOutput, "}");
  455.         END;
  456.         WriteClass    (Actions);
  457.         WriteS    (StdOutput, ";");
  458.      END;
  459.       | Designator    : WITH t^.Designator DO
  460.         WriteIdent    (StdOutput, Selector);
  461.         WriteS    (StdOutput, ":");
  462.         WriteIdent    (StdOutput, Attribute);
  463.         WriteClass    (Next);
  464.      END;
  465.       | Ident    : WITH t^.Ident DO
  466.         WriteIdent    (StdOutput, Attribute);
  467.         WriteClass    (Next);
  468.      END;
  469.       | Remote    : WITH t^.Remote DO
  470.         WriteS    (StdOutput, "REMOTE ");
  471.         WriteClass    (Designators);
  472.         WriteS    (StdOutput, "=>");
  473.         WriteIdent    (StdOutput, Type);
  474.         WriteS    (StdOutput, ":");
  475.         WriteIdent    (StdOutput, Attribute);
  476.         WriteClass    (Next);
  477.      END;
  478.       | Any    : WITH t^.Any DO
  479.         WriteString    (StdOutput, Code);
  480.         WriteClass    (Next);
  481.      END;
  482.       | Anys    : WITH t^.Anys DO
  483.         WriteClass    (Layouts);
  484.         WriteClass    (Next);
  485.      END;
  486.       | LayoutAny    : WITH t^.LayoutAny DO
  487.         WriteString    (StdOutput, Code);
  488.         WriteClass    (Next);
  489.      END;
  490.       ELSE
  491.       END;
  492.    END WriteClass;
  493.  
  494. (* line 822 "" *)
  495.  
  496. PROCEDURE HasItem (t: tTree; Item: SHORTCARD): BOOLEAN;
  497.    BEGIN
  498.       CASE t^.Kind OF
  499.       | Class:
  500.      RETURN HasItem (t^.Class.BaseClass, Item) OR HasItem (t^.Class.Attributes, Item);
  501.       | NoClass, NoAttribute:
  502.      RETURN FALSE;
  503.       ELSE
  504.      RETURN (t^.AttrOrAction.Item = Item) OR HasItem (t^.AttrOrAction.Next, Item);
  505.       END;
  506.    END HasItem;
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.  
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908. CONST yyBlockSize = 20480;
  909.  
  910. TYPE
  911.  yytBlockPtr    = POINTER TO yytBlock;
  912.  yytBlock    = RECORD
  913.              yyBlock    : ARRAY [1..yyBlockSize] OF CHAR;
  914.              yySuccessor: yytBlockPtr;
  915.           END;
  916.  
  917. VAR yyBlockList    : yytBlockPtr;
  918. VAR yyMaxSize, yyi    : SHORTCARD;
  919. VAR yyTypeRange    : ARRAY [0..129] OF SHORTCARD;
  920.  
  921. PROCEDURE yyAlloc (): tTree;
  922.  VAR yyBlockPtr    : yytBlockPtr;
  923.  BEGIN
  924.   yyBlockPtr    := yyBlockList;
  925.   yyBlockList    := Memory.Alloc (SYSTEM.TSIZE (yytBlock));
  926.   yyBlockList^.yySuccessor := yyBlockPtr;
  927.   yyPoolFreePtr    := SYSTEM.ADR (yyBlockList^.yyBlock);
  928.   yyPoolMaxPtr    := yyPoolFreePtr + yyBlockSize - yyMaxSize + 1;
  929.   INC (HeapUsed, yyBlockSize);
  930.   RETURN yyPoolFreePtr;
  931.  END yyAlloc;
  932.  
  933. PROCEDURE MakeTree (yyKind: SHORTCARD): tTree;
  934.  VAR yyByteCount    : LONGINT;
  935.  VAR yyt    : tTree;
  936.  BEGIN
  937.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [yyKind]);
  938.   yyt^.yyHead.yyMark := 0;
  939.   yyt^.Kind := yyKind;
  940.   RETURN yyt;
  941.  END MakeTree;
  942.  
  943. PROCEDURE IsType (yyTree: tTree; yyKind: SHORTCARD): BOOLEAN;
  944.  BEGIN
  945.   RETURN (yyTree # NoTree) AND (yyKind <= yyTree^.Kind) AND (yyTree^.Kind <= yyTypeRange [yyKind]);
  946.  END IsType;
  947.  
  948.  
  949. PROCEDURE mClasses (): tTree;
  950.  VAR yyByteCount    : LONGINT;
  951.  VAR yyt    : tTree;
  952.  BEGIN
  953.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Classes]);
  954.   yyt^.yyHead.yyMark := 0;
  955.   yyt^.Kind := Classes;
  956.   RETURN yyt;
  957.  END mClasses;
  958.  
  959. PROCEDURE mNoClass (): tTree;
  960.  VAR yyByteCount    : LONGINT;
  961.  VAR yyt    : tTree;
  962.  BEGIN
  963.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoClass]);
  964.   yyt^.yyHead.yyMark := 0;
  965.   yyt^.Kind := NoClass;
  966.   RETURN yyt;
  967.  END mNoClass;
  968.  
  969. PROCEDURE mClass (pName: tIdent; pProperties: tClassProperties; pAttributes: tTree; pExtensions: tTree; pNext: tTree; pSelector: tIdent; pPos: tPosition; pCode: SHORTCARD; pPrec: tIdent; pNames: tTree): tTree;
  970.  VAR yyByteCount    : LONGINT;
  971.  VAR yyt    : tTree;
  972.  BEGIN
  973.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Class]);
  974.   yyt^.yyHead.yyMark := 0;
  975.   yyt^.Kind := Class;
  976.   WITH yyt^.Class DO
  977.    Name := pName;
  978.    Properties := pProperties;
  979.    Attributes := pAttributes;
  980.    Extensions := pExtensions;
  981.    Next := pNext;
  982.    BaseClass := NoTree;
  983.    Selector := pSelector;
  984.    Pos := pPos;
  985.    Code := pCode;
  986.    Prec := pPrec;
  987.    Names := pNames;
  988.    
  989.    
  990.    
  991.    DP := DummyRelation;
  992.    SNC := DummyRelation;
  993.    DNC := DummyRelation;
  994.    OAG := DummyRelation;
  995.    Part := DummyRelation;
  996.    
  997.    
  998.    Users := DummySet;
  999.    Generated := 0;
  1000.    
  1001.    
  1002.    
  1003.   END;
  1004.   RETURN yyt;
  1005.  END mClass;
  1006.  
  1007. PROCEDURE mAttributes (): tTree;
  1008.  VAR yyByteCount    : LONGINT;
  1009.  VAR yyt    : tTree;
  1010.  BEGIN
  1011.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Attributes]);
  1012.   yyt^.yyHead.yyMark := 0;
  1013.   yyt^.Kind := Attributes;
  1014.   RETURN yyt;
  1015.  END mAttributes;
  1016.  
  1017. PROCEDURE mNoAttribute (): tTree;
  1018.  VAR yyByteCount    : LONGINT;
  1019.  VAR yyt    : tTree;
  1020.  BEGIN
  1021.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoAttribute]);
  1022.   yyt^.yyHead.yyMark := 0;
  1023.   yyt^.Kind := NoAttribute;
  1024.   RETURN yyt;
  1025.  END mNoAttribute;
  1026.  
  1027. PROCEDURE mAttrOrAction (pNext: tTree): tTree;
  1028.  VAR yyByteCount    : LONGINT;
  1029.  VAR yyt    : tTree;
  1030.  BEGIN
  1031.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [AttrOrAction]);
  1032.   yyt^.yyHead.yyMark := 0;
  1033.   yyt^.Kind := AttrOrAction;
  1034.   WITH yyt^.AttrOrAction DO
  1035.    Next := pNext;
  1036.    
  1037.   END;
  1038.   RETURN yyt;
  1039.  END mAttrOrAction;
  1040.  
  1041. PROCEDURE mChild (pNext: tTree; pName: tIdent; pType: tIdent; pProperties: tAttrProperties; pPos: tPosition): tTree;
  1042.  VAR yyByteCount    : LONGINT;
  1043.  VAR yyt    : tTree;
  1044.  BEGIN
  1045.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Child]);
  1046.   yyt^.yyHead.yyMark := 0;
  1047.   yyt^.Kind := Child;
  1048.   WITH yyt^.Child DO
  1049.    Next := pNext;
  1050.    
  1051.    Name := pName;
  1052.    Type := pType;
  1053.    Properties := pProperties;
  1054.    Pos := pPos;
  1055.    
  1056.    Partition := 9999;
  1057.    Usage := {};
  1058.    
  1059.    
  1060.    
  1061.    
  1062.   END;
  1063.   RETURN yyt;
  1064.  END mChild;
  1065.  
  1066. PROCEDURE mAttribute (pNext: tTree; pName: tIdent; pType: tIdent; pProperties: tAttrProperties; pPos: tPosition): tTree;
  1067.  VAR yyByteCount    : LONGINT;
  1068.  VAR yyt    : tTree;
  1069.  BEGIN
  1070.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Attribute]);
  1071.   yyt^.yyHead.yyMark := 0;
  1072.   yyt^.Kind := Attribute;
  1073.   WITH yyt^.Attribute DO
  1074.    Next := pNext;
  1075.    
  1076.    Name := pName;
  1077.    Type := pType;
  1078.    Properties := pProperties;
  1079.    Pos := pPos;
  1080.    
  1081.    Partition := 9999;
  1082.    Usage := {};
  1083.   END;
  1084.   RETURN yyt;
  1085.  END mAttribute;
  1086.  
  1087. PROCEDURE mActionPart (pNext: tTree; pActions: tTree): tTree;
  1088.  VAR yyByteCount    : LONGINT;
  1089.  VAR yyt    : tTree;
  1090.  BEGIN
  1091.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [ActionPart]);
  1092.   yyt^.yyHead.yyMark := 0;
  1093.   yyt^.Kind := ActionPart;
  1094.   WITH yyt^.ActionPart DO
  1095.    Next := pNext;
  1096.    
  1097.    Actions := pActions;
  1098.    
  1099.    
  1100.    Properties := {};
  1101.   END;
  1102.   RETURN yyt;
  1103.  END mActionPart;
  1104.  
  1105. PROCEDURE mCodes (pExport: tText; pImport: tText; pGlobal: tText; pLocal: tText; pBegin: tText; pClose: tText; pExportLine: tPosition; pImportLine: tPosition; pGlobalLine: tPosition; pLocalLine: tPosition; pBeginLine: tPosition; pCloseLine: tPosition): tTree;
  1106.  VAR yyByteCount    : LONGINT;
  1107.  VAR yyt    : tTree;
  1108.  BEGIN
  1109.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Codes]);
  1110.   yyt^.yyHead.yyMark := 0;
  1111.   yyt^.Kind := Codes;
  1112.   WITH yyt^.Codes DO
  1113.    Export := pExport;
  1114.    Import := pImport;
  1115.    Global := pGlobal;
  1116.    Local := pLocal;
  1117.    Begin := pBegin;
  1118.    Close := pClose;
  1119.    ExportLine := pExportLine;
  1120.    ImportLine := pImportLine;
  1121.    GlobalLine := pGlobalLine;
  1122.    LocalLine := pLocalLine;
  1123.    BeginLine := pBeginLine;
  1124.    CloseLine := pCloseLine;
  1125.   END;
  1126.   RETURN yyt;
  1127.  END mCodes;
  1128.  
  1129. PROCEDURE mDesignators (): tTree;
  1130.  VAR yyByteCount    : LONGINT;
  1131.  VAR yyt    : tTree;
  1132.  BEGIN
  1133.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Designators]);
  1134.   yyt^.yyHead.yyMark := 0;
  1135.   yyt^.Kind := Designators;
  1136.   RETURN yyt;
  1137.  END mDesignators;
  1138.  
  1139. PROCEDURE mNoDesignator (): tTree;
  1140.  VAR yyByteCount    : LONGINT;
  1141.  VAR yyt    : tTree;
  1142.  BEGIN
  1143.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoDesignator]);
  1144.   yyt^.yyHead.yyMark := 0;
  1145.   yyt^.Kind := NoDesignator;
  1146.   RETURN yyt;
  1147.  END mNoDesignator;
  1148.  
  1149. PROCEDURE mDesignator (pSelector: tIdent; pAttribute: tIdent; pPos: tPosition; pNext: tTree): tTree;
  1150.  VAR yyByteCount    : LONGINT;
  1151.  VAR yyt    : tTree;
  1152.  BEGIN
  1153.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Designator]);
  1154.   yyt^.yyHead.yyMark := 0;
  1155.   yyt^.Kind := Designator;
  1156.   WITH yyt^.Designator DO
  1157.    Selector := pSelector;
  1158.    Attribute := pAttribute;
  1159.    Pos := pPos;
  1160.    Next := pNext;
  1161.   END;
  1162.   RETURN yyt;
  1163.  END mDesignator;
  1164.  
  1165. PROCEDURE mIdent (pAttribute: tIdent; pPos: tPosition; pNext: tTree): tTree;
  1166.  VAR yyByteCount    : LONGINT;
  1167.  VAR yyt    : tTree;
  1168.  BEGIN
  1169.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Ident]);
  1170.   yyt^.yyHead.yyMark := 0;
  1171.   yyt^.Kind := Ident;
  1172.   WITH yyt^.Ident DO
  1173.    Attribute := pAttribute;
  1174.    Pos := pPos;
  1175.    Next := pNext;
  1176.   END;
  1177.   RETURN yyt;
  1178.  END mIdent;
  1179.  
  1180. PROCEDURE mRemote (pDesignators: tTree; pType: tIdent; pAttribute: tIdent; pPos: tPosition; pNext: tTree): tTree;
  1181.  VAR yyByteCount    : LONGINT;
  1182.  VAR yyt    : tTree;
  1183.  BEGIN
  1184.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Remote]);
  1185.   yyt^.yyHead.yyMark := 0;
  1186.   yyt^.Kind := Remote;
  1187.   WITH yyt^.Remote DO
  1188.    Designators := pDesignators;
  1189.    Type := pType;
  1190.    Attribute := pAttribute;
  1191.    Pos := pPos;
  1192.    Next := pNext;
  1193.   END;
  1194.   RETURN yyt;
  1195.  END mRemote;
  1196.  
  1197. PROCEDURE mAny (pCode: tStringRef; pNext: tTree): tTree;
  1198.  VAR yyByteCount    : LONGINT;
  1199.  VAR yyt    : tTree;
  1200.  BEGIN
  1201.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Any]);
  1202.   yyt^.yyHead.yyMark := 0;
  1203.   yyt^.Kind := Any;
  1204.   WITH yyt^.Any DO
  1205.    Code := pCode;
  1206.    Next := pNext;
  1207.   END;
  1208.   RETURN yyt;
  1209.  END mAny;
  1210.  
  1211. PROCEDURE mAnys (pLayouts: tTree; pNext: tTree): tTree;
  1212.  VAR yyByteCount    : LONGINT;
  1213.  VAR yyt    : tTree;
  1214.  BEGIN
  1215.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Anys]);
  1216.   yyt^.yyHead.yyMark := 0;
  1217.   yyt^.Kind := Anys;
  1218.   WITH yyt^.Anys DO
  1219.    Layouts := pLayouts;
  1220.    Next := pNext;
  1221.   END;
  1222.   RETURN yyt;
  1223.  END mAnys;
  1224.  
  1225. PROCEDURE mLayouts (): tTree;
  1226.  VAR yyByteCount    : LONGINT;
  1227.  VAR yyt    : tTree;
  1228.  BEGIN
  1229.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Layouts]);
  1230.   yyt^.yyHead.yyMark := 0;
  1231.   yyt^.Kind := Layouts;
  1232.   RETURN yyt;
  1233.  END mLayouts;
  1234.  
  1235. PROCEDURE mNoLayout (): tTree;
  1236.  VAR yyByteCount    : LONGINT;
  1237.  VAR yyt    : tTree;
  1238.  BEGIN
  1239.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoLayout]);
  1240.   yyt^.yyHead.yyMark := 0;
  1241.   yyt^.Kind := NoLayout;
  1242.   RETURN yyt;
  1243.  END mNoLayout;
  1244.  
  1245. PROCEDURE mLayoutAny (pCode: tStringRef; pNext: tTree): tTree;
  1246.  VAR yyByteCount    : LONGINT;
  1247.  VAR yyt    : tTree;
  1248.  BEGIN
  1249.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [LayoutAny]);
  1250.   yyt^.yyHead.yyMark := 0;
  1251.   yyt^.Kind := LayoutAny;
  1252.   WITH yyt^.LayoutAny DO
  1253.    Code := pCode;
  1254.    Next := pNext;
  1255.   END;
  1256.   RETURN yyt;
  1257.  END mLayoutAny;
  1258.  
  1259. PROCEDURE mNames (): tTree;
  1260.  VAR yyByteCount    : LONGINT;
  1261.  VAR yyt    : tTree;
  1262.  BEGIN
  1263.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Names]);
  1264.   yyt^.yyHead.yyMark := 0;
  1265.   yyt^.Kind := Names;
  1266.   RETURN yyt;
  1267.  END mNames;
  1268.  
  1269. PROCEDURE mNoName (): tTree;
  1270.  VAR yyByteCount    : LONGINT;
  1271.  VAR yyt    : tTree;
  1272.  BEGIN
  1273.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoName]);
  1274.   yyt^.yyHead.yyMark := 0;
  1275.   yyt^.Kind := NoName;
  1276.   RETURN yyt;
  1277.  END mNoName;
  1278.  
  1279. PROCEDURE mName (pName: tIdent; pPos: tPosition; pNext: tTree): tTree;
  1280.  VAR yyByteCount    : LONGINT;
  1281.  VAR yyt    : tTree;
  1282.  BEGIN
  1283.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Name]);
  1284.   yyt^.yyHead.yyMark := 0;
  1285.   yyt^.Kind := Name;
  1286.   WITH yyt^.Name DO
  1287.    Name := pName;
  1288.    Pos := pPos;
  1289.    Next := pNext;
  1290.   END;
  1291.   RETURN yyt;
  1292.  END mName;
  1293.  
  1294. PROCEDURE mAg (pName: tIdent; pScannerName: tIdent; pParserName: tIdent; pParserCodes: tTree; pTreeName: tIdent; pTreeCodes: tTree; pEvalName: tIdent; pEvalCodes: tTree; pPrecs: tTree; pProps: tTree; pDecls: tTree; pClasses: tTree; pModules: tTree): tTree;
  1295.  VAR yyByteCount    : LONGINT;
  1296.  VAR yyt    : tTree;
  1297.  BEGIN
  1298.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Ag]);
  1299.   yyt^.yyHead.yyMark := 0;
  1300.   yyt^.Kind := Ag;
  1301.   WITH yyt^.Ag DO
  1302.    Name := pName;
  1303.    ScannerName := pScannerName;
  1304.    ParserName := pParserName;
  1305.    ParserCodes := pParserCodes;
  1306.    TreeName := pTreeName;
  1307.    TreeCodes := pTreeCodes;
  1308.    EvalName := pEvalName;
  1309.    EvalCodes := pEvalCodes;
  1310.    Precs := pPrecs;
  1311.    Props := pProps;
  1312.    Decls := pDecls;
  1313.    Classes := pClasses;
  1314.    Modules := pModules;
  1315.    Properties := {};
  1316.   END;
  1317.   RETURN yyt;
  1318.  END mAg;
  1319.  
  1320. PROCEDURE mPrecs (): tTree;
  1321.  VAR yyByteCount    : LONGINT;
  1322.  VAR yyt    : tTree;
  1323.  BEGIN
  1324.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Precs]);
  1325.   yyt^.yyHead.yyMark := 0;
  1326.   yyt^.Kind := Precs;
  1327.   RETURN yyt;
  1328.  END mPrecs;
  1329.  
  1330. PROCEDURE mNoPrec (): tTree;
  1331.  VAR yyByteCount    : LONGINT;
  1332.  VAR yyt    : tTree;
  1333.  BEGIN
  1334.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoPrec]);
  1335.   yyt^.yyHead.yyMark := 0;
  1336.   yyt^.Kind := NoPrec;
  1337.   RETURN yyt;
  1338.  END mNoPrec;
  1339.  
  1340. PROCEDURE mPrec (pNames: tTree; pNext: tTree): tTree;
  1341.  VAR yyByteCount    : LONGINT;
  1342.  VAR yyt    : tTree;
  1343.  BEGIN
  1344.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Prec]);
  1345.   yyt^.yyHead.yyMark := 0;
  1346.   yyt^.Kind := Prec;
  1347.   WITH yyt^.Prec DO
  1348.    Names := pNames;
  1349.    Next := pNext;
  1350.   END;
  1351.   RETURN yyt;
  1352.  END mPrec;
  1353.  
  1354. PROCEDURE mLeftAssoc (pNames: tTree; pNext: tTree): tTree;
  1355.  VAR yyByteCount    : LONGINT;
  1356.  VAR yyt    : tTree;
  1357.  BEGIN
  1358.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [LeftAssoc]);
  1359.   yyt^.yyHead.yyMark := 0;
  1360.   yyt^.Kind := LeftAssoc;
  1361.   WITH yyt^.LeftAssoc DO
  1362.    Names := pNames;
  1363.    Next := pNext;
  1364.   END;
  1365.   RETURN yyt;
  1366.  END mLeftAssoc;
  1367.  
  1368. PROCEDURE mRightAssoc (pNames: tTree; pNext: tTree): tTree;
  1369.  VAR yyByteCount    : LONGINT;
  1370.  VAR yyt    : tTree;
  1371.  BEGIN
  1372.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [RightAssoc]);
  1373.   yyt^.yyHead.yyMark := 0;
  1374.   yyt^.Kind := RightAssoc;
  1375.   WITH yyt^.RightAssoc DO
  1376.    Names := pNames;
  1377.    Next := pNext;
  1378.   END;
  1379.   RETURN yyt;
  1380.  END mRightAssoc;
  1381.  
  1382. PROCEDURE mNonAssoc (pNames: tTree; pNext: tTree): tTree;
  1383.  VAR yyByteCount    : LONGINT;
  1384.  VAR yyt    : tTree;
  1385.  BEGIN
  1386.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NonAssoc]);
  1387.   yyt^.yyHead.yyMark := 0;
  1388.   yyt^.Kind := NonAssoc;
  1389.   WITH yyt^.NonAssoc DO
  1390.    Names := pNames;
  1391.    Next := pNext;
  1392.   END;
  1393.   RETURN yyt;
  1394.  END mNonAssoc;
  1395.  
  1396. PROCEDURE mActions (): tTree;
  1397.  VAR yyByteCount    : LONGINT;
  1398.  VAR yyt    : tTree;
  1399.  BEGIN
  1400.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Actions]);
  1401.   yyt^.yyHead.yyMark := 0;
  1402.   yyt^.Kind := Actions;
  1403.   RETURN yyt;
  1404.  END mActions;
  1405.  
  1406. PROCEDURE mNoAction (): tTree;
  1407.  VAR yyByteCount    : LONGINT;
  1408.  VAR yyt    : tTree;
  1409.  BEGIN
  1410.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoAction]);
  1411.   yyt^.yyHead.yyMark := 0;
  1412.   yyt^.Kind := NoAction;
  1413.   RETURN yyt;
  1414.  END mNoAction;
  1415.  
  1416. PROCEDURE mAction (pNext: tTree; pPos: tPosition): tTree;
  1417.  VAR yyByteCount    : LONGINT;
  1418.  VAR yyt    : tTree;
  1419.  BEGIN
  1420.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Action]);
  1421.   yyt^.yyHead.yyMark := 0;
  1422.   yyt^.Kind := Action;
  1423.   WITH yyt^.Action DO
  1424.    Next := pNext;
  1425.    Pos := pPos;
  1426.   END;
  1427.   RETURN yyt;
  1428.  END mAction;
  1429.  
  1430. PROCEDURE mAssign (pNext: tTree; pPos: tPosition; pResults: tTree; pArguments: tTree): tTree;
  1431.  VAR yyByteCount    : LONGINT;
  1432.  VAR yyt    : tTree;
  1433.  BEGIN
  1434.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Assign]);
  1435.   yyt^.yyHead.yyMark := 0;
  1436.   yyt^.Kind := Assign;
  1437.   WITH yyt^.Assign DO
  1438.    Next := pNext;
  1439.    Pos := pPos;
  1440.    Results := pResults;
  1441.    Arguments := pArguments;
  1442.   END;
  1443.   RETURN yyt;
  1444.  END mAssign;
  1445.  
  1446. PROCEDURE mCopy (pNext: tTree; pPos: tPosition; pResults: tTree; pArguments: tTree): tTree;
  1447.  VAR yyByteCount    : LONGINT;
  1448.  VAR yyt    : tTree;
  1449.  BEGIN
  1450.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Copy]);
  1451.   yyt^.yyHead.yyMark := 0;
  1452.   yyt^.Kind := Copy;
  1453.   WITH yyt^.Copy DO
  1454.    Next := pNext;
  1455.    Pos := pPos;
  1456.    Results := pResults;
  1457.    Arguments := pArguments;
  1458.   END;
  1459.   RETURN yyt;
  1460.  END mCopy;
  1461.  
  1462. PROCEDURE mTargetCode (pNext: tTree; pPos: tPosition; pResults: tTree; pCode: tTree): tTree;
  1463.  VAR yyByteCount    : LONGINT;
  1464.  VAR yyt    : tTree;
  1465.  BEGIN
  1466.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TargetCode]);
  1467.   yyt^.yyHead.yyMark := 0;
  1468.   yyt^.Kind := TargetCode;
  1469.   WITH yyt^.TargetCode DO
  1470.    Next := pNext;
  1471.    Pos := pPos;
  1472.    Results := pResults;
  1473.    Code := pCode;
  1474.   END;
  1475.   RETURN yyt;
  1476.  END mTargetCode;
  1477.  
  1478. PROCEDURE mOrder (pNext: tTree; pPos: tPosition; pResults: tTree; pArguments: tTree): tTree;
  1479.  VAR yyByteCount    : LONGINT;
  1480.  VAR yyt    : tTree;
  1481.  BEGIN
  1482.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Order]);
  1483.   yyt^.yyHead.yyMark := 0;
  1484.   yyt^.Kind := Order;
  1485.   WITH yyt^.Order DO
  1486.    Next := pNext;
  1487.    Pos := pPos;
  1488.    Results := pResults;
  1489.    Arguments := pArguments;
  1490.   END;
  1491.   RETURN yyt;
  1492.  END mOrder;
  1493.  
  1494. PROCEDURE mCheck (pNext: tTree; pPos: tPosition; pCondition: tTree; pStatement: tTree; pActions: tTree): tTree;
  1495.  VAR yyByteCount    : LONGINT;
  1496.  VAR yyt    : tTree;
  1497.  BEGIN
  1498.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Check]);
  1499.   yyt^.yyHead.yyMark := 0;
  1500.   yyt^.Kind := Check;
  1501.   WITH yyt^.Check DO
  1502.    Next := pNext;
  1503.    Pos := pPos;
  1504.    Condition := pCondition;
  1505.    Statement := pStatement;
  1506.    Actions := pActions;
  1507.    Results := NoTree;
  1508.   END;
  1509.   RETURN yyt;
  1510.  END mCheck;
  1511.  
  1512. PROCEDURE mModules (): tTree;
  1513.  VAR yyByteCount    : LONGINT;
  1514.  VAR yyt    : tTree;
  1515.  BEGIN
  1516.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Modules]);
  1517.   yyt^.yyHead.yyMark := 0;
  1518.   yyt^.Kind := Modules;
  1519.   RETURN yyt;
  1520.  END mModules;
  1521.  
  1522. PROCEDURE mNoModule (): tTree;
  1523.  VAR yyByteCount    : LONGINT;
  1524.  VAR yyt    : tTree;
  1525.  BEGIN
  1526.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoModule]);
  1527.   yyt^.yyHead.yyMark := 0;
  1528.   yyt^.Kind := NoModule;
  1529.   RETURN yyt;
  1530.  END mNoModule;
  1531.  
  1532. PROCEDURE mModule (pName: tIdent; pParserCodes: tTree; pTreeCodes: tTree; pEvalCodes: tTree; pProps: tTree; pDecls: tTree; pClasses: tTree; pNext: tTree): tTree;
  1533.  VAR yyByteCount    : LONGINT;
  1534.  VAR yyt    : tTree;
  1535.  BEGIN
  1536.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Module]);
  1537.   yyt^.yyHead.yyMark := 0;
  1538.   yyt^.Kind := Module;
  1539.   WITH yyt^.Module DO
  1540.    Name := pName;
  1541.    ParserCodes := pParserCodes;
  1542.    TreeCodes := pTreeCodes;
  1543.    EvalCodes := pEvalCodes;
  1544.    Props := pProps;
  1545.    Decls := pDecls;
  1546.    Classes := pClasses;
  1547.    Next := pNext;
  1548.    Properties := {};
  1549.   END;
  1550.   RETURN yyt;
  1551.  END mModule;
  1552.  
  1553. PROCEDURE mProps (): tTree;
  1554.  VAR yyByteCount    : LONGINT;
  1555.  VAR yyt    : tTree;
  1556.  BEGIN
  1557.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Props]);
  1558.   yyt^.yyHead.yyMark := 0;
  1559.   yyt^.Kind := Props;
  1560.   RETURN yyt;
  1561.  END mProps;
  1562.  
  1563. PROCEDURE mNoProp (): tTree;
  1564.  VAR yyByteCount    : LONGINT;
  1565.  VAR yyt    : tTree;
  1566.  BEGIN
  1567.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoProp]);
  1568.   yyt^.yyHead.yyMark := 0;
  1569.   yyt^.Kind := NoProp;
  1570.   RETURN yyt;
  1571.  END mNoProp;
  1572.  
  1573. PROCEDURE mProp (pProperties: BITSET; pNames: tTree; pNext: tTree): tTree;
  1574.  VAR yyByteCount    : LONGINT;
  1575.  VAR yyt    : tTree;
  1576.  BEGIN
  1577.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Prop]);
  1578.   yyt^.yyHead.yyMark := 0;
  1579.   yyt^.Kind := Prop;
  1580.   WITH yyt^.Prop DO
  1581.    Properties := pProperties;
  1582.    Names := pNames;
  1583.    Next := pNext;
  1584.   END;
  1585.   RETURN yyt;
  1586.  END mProp;
  1587.  
  1588. PROCEDURE mSelect (pNames: tTree; pNext: tTree): tTree;
  1589.  VAR yyByteCount    : LONGINT;
  1590.  VAR yyt    : tTree;
  1591.  BEGIN
  1592.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Select]);
  1593.   yyt^.yyHead.yyMark := 0;
  1594.   yyt^.Kind := Select;
  1595.   WITH yyt^.Select DO
  1596.    Names := pNames;
  1597.    Next := pNext;
  1598.   END;
  1599.   RETURN yyt;
  1600.  END mSelect;
  1601.  
  1602. PROCEDURE mDecls (): tTree;
  1603.  VAR yyByteCount    : LONGINT;
  1604.  VAR yyt    : tTree;
  1605.  BEGIN
  1606.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Decls]);
  1607.   yyt^.yyHead.yyMark := 0;
  1608.   yyt^.Kind := Decls;
  1609.   RETURN yyt;
  1610.  END mDecls;
  1611.  
  1612. PROCEDURE mNoDecl (): tTree;
  1613.  VAR yyByteCount    : LONGINT;
  1614.  VAR yyt    : tTree;
  1615.  BEGIN
  1616.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoDecl]);
  1617.   yyt^.yyHead.yyMark := 0;
  1618.   yyt^.Kind := NoDecl;
  1619.   RETURN yyt;
  1620.  END mNoDecl;
  1621.  
  1622. PROCEDURE mDecl (pNames: tTree; pAttributes: tTree; pProperties: tClassProperties; pNext: tTree): tTree;
  1623.  VAR yyByteCount    : LONGINT;
  1624.  VAR yyt    : tTree;
  1625.  BEGIN
  1626.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Decl]);
  1627.   yyt^.yyHead.yyMark := 0;
  1628.   yyt^.Kind := Decl;
  1629.   WITH yyt^.Decl DO
  1630.    Names := pNames;
  1631.    Attributes := pAttributes;
  1632.    Properties := pProperties;
  1633.    Next := pNext;
  1634.   END;
  1635.   RETURN yyt;
  1636.  END mDecl;
  1637.  
  1638. TYPE yyPtrtTree    = POINTER TO tTree;
  1639.  
  1640. VAR yyf    : IO.tFile;
  1641. VAR yyLabel    : SHORTCARD;
  1642. VAR yyKind    : SHORTCARD;
  1643. VAR yyc    : CHAR;
  1644. VAR yys    : Strings.tString;
  1645.  
  1646. PROCEDURE yyWriteNl; BEGIN IO.WriteNl (yyf); END yyWriteNl;
  1647.  
  1648. PROCEDURE yyWriteSelector (yys: ARRAY OF CHAR);
  1649.  BEGIN IO.WriteS (yyf, yys); Layout.WriteSpaces (yyf, 15 - INTEGER (HIGH (yys))); IO.WriteS (yyf, ' = '); END yyWriteSelector;
  1650.  
  1651. PROCEDURE yyWriteHex (VAR yyx: ARRAY OF SYSTEM.BYTE);
  1652.  VAR yyi    : INTEGER;
  1653.  BEGIN
  1654.   FOR yyi := 0 TO INTEGER (HIGH (yyx)) DO
  1655.    IO.WriteN (yyf, ORD (CHAR (yyx [yyi])), 2, 16);
  1656.    IO.WriteC (yyf, ' ');
  1657.   END;
  1658.  END yyWriteHex;
  1659.  
  1660. PROCEDURE yyWriteAdr (yyt: tTree);
  1661.  BEGIN
  1662.   IF yyt = NoTree THEN
  1663.    IO.WriteS (yyf, 'NoTree');
  1664.   ELSE
  1665.    yyWriteHex (yyt);
  1666.   END;
  1667.   yyWriteNl;
  1668.  END yyWriteAdr;
  1669.  
  1670. PROCEDURE yWriteNodeClass (yyt: tTree);
  1671.  BEGIN
  1672.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Class.Name); yyWriteNl;
  1673.   yyWriteSelector ('Properties'); WriteClassProperties(yyf, yyt^.Class.Properties); yyWriteNl;
  1674.   yyWriteSelector ('Attributes'); yyWriteAdr (yyt^.Class.Attributes);
  1675.   yyWriteSelector ('Extensions'); yyWriteAdr (yyt^.Class.Extensions);
  1676.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Class.Next);
  1677.   yyWriteSelector ('BaseClass'); yyWriteAdr (yyt^.Class.BaseClass);
  1678.   yyWriteSelector ('Selector'); Idents.WriteIdent (yyf, yyt^.Class.Selector); yyWriteNl;
  1679.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Class.Pos); yyWriteNl;
  1680.   yyWriteSelector ('Code'); IO.WriteI (yyf, yyt^.Class.Code, 0); yyWriteNl;
  1681.   yyWriteSelector ('Prec'); Idents.WriteIdent (yyf, yyt^.Class.Prec); yyWriteNl;
  1682.   yyWriteSelector ('Names'); yyWriteAdr (yyt^.Class.Names);
  1683.   yyWriteSelector ('AttrCount'); IO.WriteI (yyf, yyt^.Class.AttrCount, 0); yyWriteNl;
  1684.   yyWriteSelector ('InstCount'); IO.WriteI (yyf, yyt^.Class.InstCount, 0); yyWriteNl;
  1685.   yyWriteSelector ('Instance'); yyWriteHex (yyt^.Class.Instance); yyWriteNl;
  1686.   yyWriteSelector ('DP'); Relations.WriteRelation (yyf, yyt^.Class.DP); yyWriteNl;
  1687.   yyWriteSelector ('SNC'); Relations.WriteRelation (yyf, yyt^.Class.SNC); yyWriteNl;
  1688.   yyWriteSelector ('DNC'); Relations.WriteRelation (yyf, yyt^.Class.DNC); yyWriteNl;
  1689.   yyWriteSelector ('OAG'); Relations.WriteRelation (yyf, yyt^.Class.OAG); yyWriteNl;
  1690.   yyWriteSelector ('Part'); Relations.WriteRelation (yyf, yyt^.Class.Part); yyWriteNl;
  1691.   yyWriteSelector ('Index'); IO.WriteI (yyf, yyt^.Class.Index, 0); yyWriteNl;
  1692.   yyWriteSelector ('Visits'); IO.WriteI (yyf, yyt^.Class.Visits, 0); yyWriteNl;
  1693.   yyWriteSelector ('Users'); Sets.WriteSet (yyf, yyt^.Class.Users); yyWriteNl;
  1694.   yyWriteSelector ('Generated'); IO.WriteI (yyf, yyt^.Class.Generated, 0); yyWriteNl;
  1695.   yyWriteSelector ('BitCount'); IO.WriteI (yyf, yyt^.Class.BitCount, 0); yyWriteNl;
  1696.   yyWriteSelector ('BitIndex'); yyWriteHex (yyt^.Class.BitIndex); yyWriteNl;
  1697.   yyWriteSelector ('D'); yyWriteHex (yyt^.Class.D); yyWriteNl;
  1698.  END yWriteNodeClass;
  1699.  
  1700. PROCEDURE yWriteNodeAttrOrAction (yyt: tTree);
  1701.  BEGIN
  1702.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.AttrOrAction.Next);
  1703.   yyWriteSelector ('Item'); IO.WriteI (yyf, yyt^.AttrOrAction.Item, 0); yyWriteNl;
  1704.  END yWriteNodeAttrOrAction;
  1705.  
  1706. PROCEDURE yWriteNodeChild (yyt: tTree);
  1707.  BEGIN
  1708.   yWriteNodeAttrOrAction (yyt); 
  1709.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Child.Name); yyWriteNl;
  1710.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.Child.Type); yyWriteNl;
  1711.   yyWriteSelector ('Properties'); WriteAttrProperties(yyf, yyt^.Child.Properties); yyWriteNl;
  1712.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Child.Pos); yyWriteNl;
  1713.   yyWriteSelector ('AttrIndex'); IO.WriteI (yyf, yyt^.Child.AttrIndex, 0); yyWriteNl;
  1714.   yyWriteSelector ('Partition'); WriteI (yyf, yyt^.Child.Partition, 0); yyWriteNl;
  1715.   yyWriteSelector ('Usage'); yyWriteHex (yyt^.Child.Usage); yyWriteNl;
  1716.   yyWriteSelector ('InstOffset'); IO.WriteI (yyf, yyt^.Child.InstOffset, 0); yyWriteNl;
  1717.   yyWriteSelector ('Class'); yyWriteHex (yyt^.Child.Class); yyWriteNl;
  1718.   yyWriteSelector ('ParsIndex'); IO.WriteI (yyf, yyt^.Child.ParsIndex, 0); yyWriteNl;
  1719.   yyWriteSelector ('BitOffset'); IO.WriteI (yyf, yyt^.Child.BitOffset, 0); yyWriteNl;
  1720.  END yWriteNodeChild;
  1721.  
  1722. PROCEDURE yWriteNodeAttribute (yyt: tTree);
  1723.  BEGIN
  1724.   yWriteNodeAttrOrAction (yyt); 
  1725.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Attribute.Name); yyWriteNl;
  1726.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.Attribute.Type); yyWriteNl;
  1727.   yyWriteSelector ('Properties'); WriteAttrProperties(yyf, yyt^.Attribute.Properties); yyWriteNl;
  1728.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Attribute.Pos); yyWriteNl;
  1729.   yyWriteSelector ('AttrIndex'); IO.WriteI (yyf, yyt^.Attribute.AttrIndex, 0); yyWriteNl;
  1730.   yyWriteSelector ('Partition'); WriteI (yyf, yyt^.Attribute.Partition, 0); yyWriteNl;
  1731.   yyWriteSelector ('Usage'); yyWriteHex (yyt^.Attribute.Usage); yyWriteNl;
  1732.  END yWriteNodeAttribute;
  1733.  
  1734. PROCEDURE yWriteNodeActionPart (yyt: tTree);
  1735.  BEGIN
  1736.   yWriteNodeAttrOrAction (yyt); 
  1737.   yyWriteSelector ('Actions'); yyWriteAdr (yyt^.ActionPart.Actions);
  1738.   yyWriteSelector ('Name'); IO.WriteI (yyf, yyt^.ActionPart.Name, 0); yyWriteNl;
  1739.   yyWriteSelector ('ParsIndex'); IO.WriteI (yyf, yyt^.ActionPart.ParsIndex, 0); yyWriteNl;
  1740.   yyWriteSelector ('Properties'); yyWriteHex (yyt^.ActionPart.Properties); yyWriteNl;
  1741.  END yWriteNodeActionPart;
  1742.  
  1743. PROCEDURE yWriteNodeCodes (yyt: tTree);
  1744.  BEGIN
  1745.   yyWriteSelector ('Export'); Texts.WriteText (yyf, yyt^.Codes.Export); yyWriteNl;
  1746.   yyWriteSelector ('Import'); Texts.WriteText (yyf, yyt^.Codes.Import); yyWriteNl;
  1747.   yyWriteSelector ('Global'); Texts.WriteText (yyf, yyt^.Codes.Global); yyWriteNl;
  1748.   yyWriteSelector ('Local'); Texts.WriteText (yyf, yyt^.Codes.Local); yyWriteNl;
  1749.   yyWriteSelector ('Begin'); Texts.WriteText (yyf, yyt^.Codes.Begin); yyWriteNl;
  1750.   yyWriteSelector ('Close'); Texts.WriteText (yyf, yyt^.Codes.Close); yyWriteNl;
  1751.   yyWriteSelector ('ExportLine'); Positions.WritePosition (yyf, yyt^.Codes.ExportLine); yyWriteNl;
  1752.   yyWriteSelector ('ImportLine'); Positions.WritePosition (yyf, yyt^.Codes.ImportLine); yyWriteNl;
  1753.   yyWriteSelector ('GlobalLine'); Positions.WritePosition (yyf, yyt^.Codes.GlobalLine); yyWriteNl;
  1754.   yyWriteSelector ('LocalLine'); Positions.WritePosition (yyf, yyt^.Codes.LocalLine); yyWriteNl;
  1755.   yyWriteSelector ('BeginLine'); Positions.WritePosition (yyf, yyt^.Codes.BeginLine); yyWriteNl;
  1756.   yyWriteSelector ('CloseLine'); Positions.WritePosition (yyf, yyt^.Codes.CloseLine); yyWriteNl;
  1757.  END yWriteNodeCodes;
  1758.  
  1759. PROCEDURE yWriteNodeDesignator (yyt: tTree);
  1760.  BEGIN
  1761.   yyWriteSelector ('Selector'); Idents.WriteIdent (yyf, yyt^.Designator.Selector); yyWriteNl;
  1762.   yyWriteSelector ('Attribute'); Idents.WriteIdent (yyf, yyt^.Designator.Attribute); yyWriteNl;
  1763.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Designator.Pos); yyWriteNl;
  1764.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Designator.Next);
  1765.  END yWriteNodeDesignator;
  1766.  
  1767. PROCEDURE yWriteNodeIdent (yyt: tTree);
  1768.  BEGIN
  1769.   yyWriteSelector ('Attribute'); Idents.WriteIdent (yyf, yyt^.Ident.Attribute); yyWriteNl;
  1770.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Ident.Pos); yyWriteNl;
  1771.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Ident.Next);
  1772.  END yWriteNodeIdent;
  1773.  
  1774. PROCEDURE yWriteNodeRemote (yyt: tTree);
  1775.  BEGIN
  1776.   yyWriteSelector ('Designators'); yyWriteAdr (yyt^.Remote.Designators);
  1777.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.Remote.Type); yyWriteNl;
  1778.   yyWriteSelector ('Attribute'); Idents.WriteIdent (yyf, yyt^.Remote.Attribute); yyWriteNl;
  1779.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Remote.Pos); yyWriteNl;
  1780.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Remote.Next);
  1781.  END yWriteNodeRemote;
  1782.  
  1783. PROCEDURE yWriteNodeAny (yyt: tTree);
  1784.  BEGIN
  1785.   yyWriteSelector ('Code'); StringMem.WriteString (yyf, yyt^.Any.Code); yyWriteNl;
  1786.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Any.Next);
  1787.  END yWriteNodeAny;
  1788.  
  1789. PROCEDURE yWriteNodeAnys (yyt: tTree);
  1790.  BEGIN
  1791.   yyWriteSelector ('Layouts'); yyWriteAdr (yyt^.Anys.Layouts);
  1792.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Anys.Next);
  1793.  END yWriteNodeAnys;
  1794.  
  1795. PROCEDURE yWriteNodeLayoutAny (yyt: tTree);
  1796.  BEGIN
  1797.   yyWriteSelector ('Code'); StringMem.WriteString (yyf, yyt^.LayoutAny.Code); yyWriteNl;
  1798.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.LayoutAny.Next);
  1799.  END yWriteNodeLayoutAny;
  1800.  
  1801. PROCEDURE yWriteNodeName (yyt: tTree);
  1802.  BEGIN
  1803.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Name.Name); yyWriteNl;
  1804.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Name.Pos); yyWriteNl;
  1805.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Name.Next);
  1806.  END yWriteNodeName;
  1807.  
  1808. PROCEDURE yWriteNodeAg (yyt: tTree);
  1809.  BEGIN
  1810.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Ag.Name); yyWriteNl;
  1811.   yyWriteSelector ('ScannerName'); Idents.WriteIdent (yyf, yyt^.Ag.ScannerName); yyWriteNl;
  1812.   yyWriteSelector ('ParserName'); Idents.WriteIdent (yyf, yyt^.Ag.ParserName); yyWriteNl;
  1813.   yyWriteSelector ('ParserCodes'); yyWriteAdr (yyt^.Ag.ParserCodes);
  1814.   yyWriteSelector ('TreeName'); Idents.WriteIdent (yyf, yyt^.Ag.TreeName); yyWriteNl;
  1815.   yyWriteSelector ('TreeCodes'); yyWriteAdr (yyt^.Ag.TreeCodes);
  1816.   yyWriteSelector ('EvalName'); Idents.WriteIdent (yyf, yyt^.Ag.EvalName); yyWriteNl;
  1817.   yyWriteSelector ('EvalCodes'); yyWriteAdr (yyt^.Ag.EvalCodes);
  1818.   yyWriteSelector ('Precs'); yyWriteAdr (yyt^.Ag.Precs);
  1819.   yyWriteSelector ('Props'); yyWriteAdr (yyt^.Ag.Props);
  1820.   yyWriteSelector ('Decls'); yyWriteAdr (yyt^.Ag.Decls);
  1821.   yyWriteSelector ('Classes'); yyWriteAdr (yyt^.Ag.Classes);
  1822.   yyWriteSelector ('Modules'); yyWriteAdr (yyt^.Ag.Modules);
  1823.   yyWriteSelector ('Properties'); yyWriteHex (yyt^.Ag.Properties); yyWriteNl;
  1824.  END yWriteNodeAg;
  1825.  
  1826. PROCEDURE yWriteNodePrec (yyt: tTree);
  1827.  BEGIN
  1828.   yyWriteSelector ('Names'); yyWriteAdr (yyt^.Prec.Names);
  1829.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Prec.Next);
  1830.  END yWriteNodePrec;
  1831.  
  1832. PROCEDURE yWriteNodeLeftAssoc (yyt: tTree);
  1833.  BEGIN
  1834.   yWriteNodePrec (yyt); 
  1835.  END yWriteNodeLeftAssoc;
  1836.  
  1837. PROCEDURE yWriteNodeRightAssoc (yyt: tTree);
  1838.  BEGIN
  1839.   yWriteNodePrec (yyt); 
  1840.  END yWriteNodeRightAssoc;
  1841.  
  1842. PROCEDURE yWriteNodeNonAssoc (yyt: tTree);
  1843.  BEGIN
  1844.   yWriteNodePrec (yyt); 
  1845.  END yWriteNodeNonAssoc;
  1846.  
  1847. PROCEDURE yWriteNodeAction (yyt: tTree);
  1848.  BEGIN
  1849.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Action.Next);
  1850.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Action.Pos); yyWriteNl;
  1851.  END yWriteNodeAction;
  1852.  
  1853. PROCEDURE yWriteNodeAssign (yyt: tTree);
  1854.  BEGIN
  1855.   yWriteNodeAction (yyt); 
  1856.   yyWriteSelector ('Results'); yyWriteAdr (yyt^.Assign.Results);
  1857.   yyWriteSelector ('Arguments'); yyWriteAdr (yyt^.Assign.Arguments);
  1858.  END yWriteNodeAssign;
  1859.  
  1860. PROCEDURE yWriteNodeCopy (yyt: tTree);
  1861.  BEGIN
  1862.   yWriteNodeAction (yyt); 
  1863.   yyWriteSelector ('Results'); yyWriteAdr (yyt^.Copy.Results);
  1864.   yyWriteSelector ('Arguments'); yyWriteAdr (yyt^.Copy.Arguments);
  1865.  END yWriteNodeCopy;
  1866.  
  1867. PROCEDURE yWriteNodeTargetCode (yyt: tTree);
  1868.  BEGIN
  1869.   yWriteNodeAction (yyt); 
  1870.   yyWriteSelector ('Results'); yyWriteAdr (yyt^.TargetCode.Results);
  1871.   yyWriteSelector ('Code'); yyWriteAdr (yyt^.TargetCode.Code);
  1872.  END yWriteNodeTargetCode;
  1873.  
  1874. PROCEDURE yWriteNodeOrder (yyt: tTree);
  1875.  BEGIN
  1876.   yWriteNodeAction (yyt); 
  1877.   yyWriteSelector ('Results'); yyWriteAdr (yyt^.Order.Results);
  1878.   yyWriteSelector ('Arguments'); yyWriteAdr (yyt^.Order.Arguments);
  1879.  END yWriteNodeOrder;
  1880.  
  1881. PROCEDURE yWriteNodeCheck (yyt: tTree);
  1882.  BEGIN
  1883.   yWriteNodeAction (yyt); 
  1884.   yyWriteSelector ('Condition'); yyWriteAdr (yyt^.Check.Condition);
  1885.   yyWriteSelector ('Statement'); yyWriteAdr (yyt^.Check.Statement);
  1886.   yyWriteSelector ('Actions'); yyWriteAdr (yyt^.Check.Actions);
  1887.   yyWriteSelector ('Results'); yyWriteAdr (yyt^.Check.Results);
  1888.  END yWriteNodeCheck;
  1889.  
  1890. PROCEDURE yWriteNodeModule (yyt: tTree);
  1891.  BEGIN
  1892.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Module.Name); yyWriteNl;
  1893.   yyWriteSelector ('ParserCodes'); yyWriteAdr (yyt^.Module.ParserCodes);
  1894.   yyWriteSelector ('TreeCodes'); yyWriteAdr (yyt^.Module.TreeCodes);
  1895.   yyWriteSelector ('EvalCodes'); yyWriteAdr (yyt^.Module.EvalCodes);
  1896.   yyWriteSelector ('Props'); yyWriteAdr (yyt^.Module.Props);
  1897.   yyWriteSelector ('Decls'); yyWriteAdr (yyt^.Module.Decls);
  1898.   yyWriteSelector ('Classes'); yyWriteAdr (yyt^.Module.Classes);
  1899.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Module.Next);
  1900.   yyWriteSelector ('Properties'); yyWriteHex (yyt^.Module.Properties); yyWriteNl;
  1901.  END yWriteNodeModule;
  1902.  
  1903. PROCEDURE yWriteNodeProp (yyt: tTree);
  1904.  BEGIN
  1905.   yyWriteSelector ('Properties'); yyWriteHex (yyt^.Prop.Properties); yyWriteNl;
  1906.   yyWriteSelector ('Names'); yyWriteAdr (yyt^.Prop.Names);
  1907.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Prop.Next);
  1908.  END yWriteNodeProp;
  1909.  
  1910. PROCEDURE yWriteNodeSelect (yyt: tTree);
  1911.  BEGIN
  1912.   yyWriteSelector ('Names'); yyWriteAdr (yyt^.Select.Names);
  1913.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Select.Next);
  1914.  END yWriteNodeSelect;
  1915.  
  1916. PROCEDURE yWriteNodeDecl (yyt: tTree);
  1917.  BEGIN
  1918.   yyWriteSelector ('Names'); yyWriteAdr (yyt^.Decl.Names);
  1919.   yyWriteSelector ('Attributes'); yyWriteAdr (yyt^.Decl.Attributes);
  1920.   yyWriteSelector ('Properties'); WriteClassProperties(yyf, yyt^.Decl.Properties); yyWriteNl;
  1921.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Decl.Next);
  1922.  END yWriteNodeDecl;
  1923.  
  1924. PROCEDURE WriteTreeNode (yyyf: IO.tFile; yyt: tTree);
  1925.  BEGIN
  1926.   yyf := yyyf;
  1927.   IF yyt = NoTree THEN
  1928.    IO.WriteS (yyf, 'NoTree'); yyWriteNl; RETURN;
  1929.   END;
  1930.  
  1931.   CASE yyt^.Kind OF
  1932. | Classes: IO.WriteS (yyf, 'Classes'); yyWriteNl;
  1933. | NoClass: IO.WriteS (yyf, 'NoClass'); yyWriteNl;
  1934. | Class: IO.WriteS (yyf, 'Class'); yyWriteNl; yWriteNodeClass (yyt);
  1935. | Attributes: IO.WriteS (yyf, 'Attributes'); yyWriteNl;
  1936. | NoAttribute: IO.WriteS (yyf, 'NoAttribute'); yyWriteNl;
  1937. | AttrOrAction: IO.WriteS (yyf, 'AttrOrAction'); yyWriteNl; yWriteNodeAttrOrAction (yyt);
  1938. | Child: IO.WriteS (yyf, 'Child'); yyWriteNl; yWriteNodeChild (yyt);
  1939. | Attribute: IO.WriteS (yyf, 'Attribute'); yyWriteNl; yWriteNodeAttribute (yyt);
  1940. | ActionPart: IO.WriteS (yyf, 'ActionPart'); yyWriteNl; yWriteNodeActionPart (yyt);
  1941. | Codes: IO.WriteS (yyf, 'Codes'); yyWriteNl; yWriteNodeCodes (yyt);
  1942. | Designators: IO.WriteS (yyf, 'Designators'); yyWriteNl;
  1943. | NoDesignator: IO.WriteS (yyf, 'NoDesignator'); yyWriteNl;
  1944. | Designator: IO.WriteS (yyf, 'Designator'); yyWriteNl; yWriteNodeDesignator (yyt);
  1945. | Ident: IO.WriteS (yyf, 'Ident'); yyWriteNl; yWriteNodeIdent (yyt);
  1946. | Remote: IO.WriteS (yyf, 'Remote'); yyWriteNl; yWriteNodeRemote (yyt);
  1947. | Any: IO.WriteS (yyf, 'Any'); yyWriteNl; yWriteNodeAny (yyt);
  1948. | Anys: IO.WriteS (yyf, 'Anys'); yyWriteNl; yWriteNodeAnys (yyt);
  1949. | Layouts: IO.WriteS (yyf, 'Layouts'); yyWriteNl;
  1950. | NoLayout: IO.WriteS (yyf, 'NoLayout'); yyWriteNl;
  1951. | LayoutAny: IO.WriteS (yyf, 'LayoutAny'); yyWriteNl; yWriteNodeLayoutAny (yyt);
  1952. | Names: IO.WriteS (yyf, 'Names'); yyWriteNl;
  1953. | NoName: IO.WriteS (yyf, 'NoName'); yyWriteNl;
  1954. | Name: IO.WriteS (yyf, 'Name'); yyWriteNl; yWriteNodeName (yyt);
  1955. | Ag: IO.WriteS (yyf, 'Ag'); yyWriteNl; yWriteNodeAg (yyt);
  1956. | Precs: IO.WriteS (yyf, 'Precs'); yyWriteNl;
  1957. | NoPrec: IO.WriteS (yyf, 'NoPrec'); yyWriteNl;
  1958. | Prec: IO.WriteS (yyf, 'Prec'); yyWriteNl; yWriteNodePrec (yyt);
  1959. | LeftAssoc: IO.WriteS (yyf, 'LeftAssoc'); yyWriteNl; yWriteNodeLeftAssoc (yyt);
  1960. | RightAssoc: IO.WriteS (yyf, 'RightAssoc'); yyWriteNl; yWriteNodeRightAssoc (yyt);
  1961. | NonAssoc: IO.WriteS (yyf, 'NonAssoc'); yyWriteNl; yWriteNodeNonAssoc (yyt);
  1962. | Actions: IO.WriteS (yyf, 'Actions'); yyWriteNl;
  1963. | NoAction: IO.WriteS (yyf, 'NoAction'); yyWriteNl;
  1964. | Action: IO.WriteS (yyf, 'Action'); yyWriteNl; yWriteNodeAction (yyt);
  1965. | Assign: IO.WriteS (yyf, 'Assign'); yyWriteNl; yWriteNodeAssign (yyt);
  1966. | Copy: IO.WriteS (yyf, 'Copy'); yyWriteNl; yWriteNodeCopy (yyt);
  1967. | TargetCode: IO.WriteS (yyf, 'TargetCode'); yyWriteNl; yWriteNodeTargetCode (yyt);
  1968. | Order: IO.WriteS (yyf, 'Order'); yyWriteNl; yWriteNodeOrder (yyt);
  1969. | Check: IO.WriteS (yyf, 'Check'); yyWriteNl; yWriteNodeCheck (yyt);
  1970. | Modules: IO.WriteS (yyf, 'Modules'); yyWriteNl;
  1971. | NoModule: IO.WriteS (yyf, 'NoModule'); yyWriteNl;
  1972. | Module: IO.WriteS (yyf, 'Module'); yyWriteNl; yWriteNodeModule (yyt);
  1973. | Props: IO.WriteS (yyf, 'Props'); yyWriteNl;
  1974. | NoProp: IO.WriteS (yyf, 'NoProp'); yyWriteNl;
  1975. | Prop: IO.WriteS (yyf, 'Prop'); yyWriteNl; yWriteNodeProp (yyt);
  1976. | Select: IO.WriteS (yyf, 'Select'); yyWriteNl; yWriteNodeSelect (yyt);
  1977. | Decls: IO.WriteS (yyf, 'Decls'); yyWriteNl;
  1978. | NoDecl: IO.WriteS (yyf, 'NoDecl'); yyWriteNl;
  1979. | Decl: IO.WriteS (yyf, 'Decl'); yyWriteNl; yWriteNodeDecl (yyt);
  1980.   ELSE
  1981.   END;
  1982.  END WriteTreeNode;
  1983.  
  1984. CONST yyNil    = 374C;
  1985. CONST yyNoLabel    = 375C;
  1986. CONST yyLabelDef    = 376C;
  1987. CONST yyLabelUse    = 377C;
  1988.  
  1989. PROCEDURE ReverseTree (yyOld: tTree): tTree;
  1990.  VAR yyNew, yyNext, yyTail    : tTree;
  1991.  BEGIN
  1992.   yyNew    := yyOld;
  1993.   yyTail    := yyOld;
  1994.   LOOP
  1995.    CASE yyOld^.Kind OF
  1996. | Class: yyNext := yyOld^.Class.Next; yyOld^.Class.Next := yyNew;
  1997. | AttrOrAction: yyNext := yyOld^.AttrOrAction.Next; yyOld^.AttrOrAction.Next := yyNew;
  1998. | Child: yyNext := yyOld^.Child.Next; yyOld^.Child.Next := yyNew;
  1999. | Attribute: yyNext := yyOld^.Attribute.Next; yyOld^.Attribute.Next := yyNew;
  2000. | ActionPart: yyNext := yyOld^.ActionPart.Next; yyOld^.ActionPart.Next := yyNew;
  2001. | Designator: yyNext := yyOld^.Designator.Next; yyOld^.Designator.Next := yyNew;
  2002. | Ident: yyNext := yyOld^.Ident.Next; yyOld^.Ident.Next := yyNew;
  2003. | Remote: yyNext := yyOld^.Remote.Next; yyOld^.Remote.Next := yyNew;
  2004. | Any: yyNext := yyOld^.Any.Next; yyOld^.Any.Next := yyNew;
  2005. | Anys: yyNext := yyOld^.Anys.Next; yyOld^.Anys.Next := yyNew;
  2006. | LayoutAny: yyNext := yyOld^.LayoutAny.Next; yyOld^.LayoutAny.Next := yyNew;
  2007. | Name: yyNext := yyOld^.Name.Next; yyOld^.Name.Next := yyNew;
  2008. | Prec: yyNext := yyOld^.Prec.Next; yyOld^.Prec.Next := yyNew;
  2009. | LeftAssoc: yyNext := yyOld^.LeftAssoc.Next; yyOld^.LeftAssoc.Next := yyNew;
  2010. | RightAssoc: yyNext := yyOld^.RightAssoc.Next; yyOld^.RightAssoc.Next := yyNew;
  2011. | NonAssoc: yyNext := yyOld^.NonAssoc.Next; yyOld^.NonAssoc.Next := yyNew;
  2012. | Action: yyNext := yyOld^.Action.Next; yyOld^.Action.Next := yyNew;
  2013. | Assign: yyNext := yyOld^.Assign.Next; yyOld^.Assign.Next := yyNew;
  2014. | Copy: yyNext := yyOld^.Copy.Next; yyOld^.Copy.Next := yyNew;
  2015. | TargetCode: yyNext := yyOld^.TargetCode.Next; yyOld^.TargetCode.Next := yyNew;
  2016. | Order: yyNext := yyOld^.Order.Next; yyOld^.Order.Next := yyNew;
  2017. | Check: yyNext := yyOld^.Check.Next; yyOld^.Check.Next := yyNew;
  2018. | Module: yyNext := yyOld^.Module.Next; yyOld^.Module.Next := yyNew;
  2019. | Prop: yyNext := yyOld^.Prop.Next; yyOld^.Prop.Next := yyNew;
  2020. | Select: yyNext := yyOld^.Select.Next; yyOld^.Select.Next := yyNew;
  2021. | Decl: yyNext := yyOld^.Decl.Next; yyOld^.Decl.Next := yyNew;
  2022.    ELSE EXIT;
  2023.    END;
  2024.    yyNew    := yyOld;
  2025.    yyOld    := yyNext;
  2026.   END;
  2027.   CASE yyTail^.Kind OF
  2028. | Class: yyTail^.Class.Next := yyOld;
  2029. | AttrOrAction: yyTail^.AttrOrAction.Next := yyOld;
  2030. | Child: yyTail^.Child.Next := yyOld;
  2031. | Attribute: yyTail^.Attribute.Next := yyOld;
  2032. | ActionPart: yyTail^.ActionPart.Next := yyOld;
  2033. | Designator: yyTail^.Designator.Next := yyOld;
  2034. | Ident: yyTail^.Ident.Next := yyOld;
  2035. | Remote: yyTail^.Remote.Next := yyOld;
  2036. | Any: yyTail^.Any.Next := yyOld;
  2037. | Anys: yyTail^.Anys.Next := yyOld;
  2038. | LayoutAny: yyTail^.LayoutAny.Next := yyOld;
  2039. | Name: yyTail^.Name.Next := yyOld;
  2040. | Prec: yyTail^.Prec.Next := yyOld;
  2041. | LeftAssoc: yyTail^.LeftAssoc.Next := yyOld;
  2042. | RightAssoc: yyTail^.RightAssoc.Next := yyOld;
  2043. | NonAssoc: yyTail^.NonAssoc.Next := yyOld;
  2044. | Action: yyTail^.Action.Next := yyOld;
  2045. | Assign: yyTail^.Assign.Next := yyOld;
  2046. | Copy: yyTail^.Copy.Next := yyOld;
  2047. | TargetCode: yyTail^.TargetCode.Next := yyOld;
  2048. | Order: yyTail^.Order.Next := yyOld;
  2049. | Check: yyTail^.Check.Next := yyOld;
  2050. | Module: yyTail^.Module.Next := yyOld;
  2051. | Prop: yyTail^.Prop.Next := yyOld;
  2052. | Select: yyTail^.Select.Next := yyOld;
  2053. | Decl: yyTail^.Decl.Next := yyOld;
  2054.   ELSE
  2055.   END;
  2056.   RETURN yyNew;
  2057.  END ReverseTree;
  2058.  
  2059. CONST yyyWrite = 1; yyyRead = 2; yyyQuit = 3;
  2060.  
  2061. VAR yyString    : ARRAY [0..31] OF CHAR;
  2062. VAR yyLength    : INTEGER;
  2063. VAR yyCh    : CHAR;
  2064. VAR yyState    : INTEGER;
  2065.  
  2066. PROCEDURE yyyIsEqual (yya: ARRAY OF CHAR): BOOLEAN;
  2067.  VAR yyi    : INTEGER;
  2068.  BEGIN
  2069.   IF (yyLength >= 0) AND (yyString [yyLength] = ' ') THEN
  2070.    IF yyLength - 1 # INTEGER (HIGH (yya)) THEN RETURN FALSE; END;
  2071.    FOR yyi := 0 TO yyLength - 1 DO
  2072.     IF yyString [yyi] # yya [yyi] THEN RETURN FALSE; END;
  2073.    END;
  2074.   ELSE
  2075.    IF yyLength > INTEGER (HIGH (yya)) THEN RETURN FALSE; END;
  2076.    FOR yyi := 0 TO yyLength DO
  2077.     IF yyString [yyi] # yya [yyi] THEN RETURN FALSE; END;
  2078.    END;
  2079.   END;
  2080.   RETURN TRUE;
  2081.  END yyyIsEqual;
  2082.  
  2083. PROCEDURE QueryTree (yyt: tTree);
  2084.  BEGIN
  2085.   yyState := yyyWrite;
  2086.   LOOP
  2087.    CASE yyState OF
  2088.    | yyyQuit    : RETURN;
  2089.    | yyyWrite    : WriteTreeNode (IO.StdOutput, yyt); yyState := yyyRead;
  2090.    | yyyRead    : IO.WriteS (IO.StdOutput, '? '); yyLength := -1; yyCh := IO.ReadC (IO.StdInput);
  2091.     WHILE yyCh # 12C DO INC (yyLength); yyString [yyLength] := yyCh; yyCh := IO.ReadC (IO.StdInput); END;
  2092.     IF    yyyIsEqual ('parent') THEN yyState := yyyWrite; RETURN;
  2093.     ELSIF yyyIsEqual ('quit'  ) THEN yyState := yyyQuit ; RETURN;
  2094.     ELSIF yyt # NoTree THEN
  2095.      CASE yyt^.Kind OF
  2096. | Class: IF FALSE THEN
  2097. ELSIF yyyIsEqual ('Attributes') THEN QueryTree (yyt^.Class.Attributes);
  2098. ELSIF yyyIsEqual ('Extensions') THEN QueryTree (yyt^.Class.Extensions);
  2099. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Class.Next);
  2100. ELSIF yyyIsEqual ('BaseClass') THEN QueryTree (yyt^.Class.BaseClass);
  2101. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.Class.Names);
  2102. END;
  2103. | AttrOrAction: IF FALSE THEN
  2104. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.AttrOrAction.Next);
  2105. END;
  2106. | Child: IF FALSE THEN
  2107. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Child.Next);
  2108. END;
  2109. | Attribute: IF FALSE THEN
  2110. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Attribute.Next);
  2111. END;
  2112. | ActionPart: IF FALSE THEN
  2113. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.ActionPart.Next);
  2114. ELSIF yyyIsEqual ('Actions') THEN QueryTree (yyt^.ActionPart.Actions);
  2115. END;
  2116. | Designator: IF FALSE THEN
  2117. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Designator.Next);
  2118. END;
  2119. | Ident: IF FALSE THEN
  2120. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Ident.Next);
  2121. END;
  2122. | Remote: IF FALSE THEN
  2123. ELSIF yyyIsEqual ('Designators') THEN QueryTree (yyt^.Remote.Designators);
  2124. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Remote.Next);
  2125. END;
  2126. | Any: IF FALSE THEN
  2127. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Any.Next);
  2128. END;
  2129. | Anys: IF FALSE THEN
  2130. ELSIF yyyIsEqual ('Layouts') THEN QueryTree (yyt^.Anys.Layouts);
  2131. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Anys.Next);
  2132. END;
  2133. | LayoutAny: IF FALSE THEN
  2134. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.LayoutAny.Next);
  2135. END;
  2136. | Name: IF FALSE THEN
  2137. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Name.Next);
  2138. END;
  2139. | Ag: IF FALSE THEN
  2140. ELSIF yyyIsEqual ('ParserCodes') THEN QueryTree (yyt^.Ag.ParserCodes);
  2141. ELSIF yyyIsEqual ('TreeCodes') THEN QueryTree (yyt^.Ag.TreeCodes);
  2142. ELSIF yyyIsEqual ('EvalCodes') THEN QueryTree (yyt^.Ag.EvalCodes);
  2143. ELSIF yyyIsEqual ('Precs') THEN QueryTree (yyt^.Ag.Precs);
  2144. ELSIF yyyIsEqual ('Props') THEN QueryTree (yyt^.Ag.Props);
  2145. ELSIF yyyIsEqual ('Decls') THEN QueryTree (yyt^.Ag.Decls);
  2146. ELSIF yyyIsEqual ('Classes') THEN QueryTree (yyt^.Ag.Classes);
  2147. ELSIF yyyIsEqual ('Modules') THEN QueryTree (yyt^.Ag.Modules);
  2148. END;
  2149. | Prec: IF FALSE THEN
  2150. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.Prec.Names);
  2151. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Prec.Next);
  2152. END;
  2153. | LeftAssoc: IF FALSE THEN
  2154. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.LeftAssoc.Names);
  2155. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.LeftAssoc.Next);
  2156. END;
  2157. | RightAssoc: IF FALSE THEN
  2158. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.RightAssoc.Names);
  2159. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.RightAssoc.Next);
  2160. END;
  2161. | NonAssoc: IF FALSE THEN
  2162. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.NonAssoc.Names);
  2163. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.NonAssoc.Next);
  2164. END;
  2165. | Action: IF FALSE THEN
  2166. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Action.Next);
  2167. END;
  2168. | Assign: IF FALSE THEN
  2169. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Assign.Next);
  2170. ELSIF yyyIsEqual ('Results') THEN QueryTree (yyt^.Assign.Results);
  2171. ELSIF yyyIsEqual ('Arguments') THEN QueryTree (yyt^.Assign.Arguments);
  2172. END;
  2173. | Copy: IF FALSE THEN
  2174. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Copy.Next);
  2175. ELSIF yyyIsEqual ('Results') THEN QueryTree (yyt^.Copy.Results);
  2176. ELSIF yyyIsEqual ('Arguments') THEN QueryTree (yyt^.Copy.Arguments);
  2177. END;
  2178. | TargetCode: IF FALSE THEN
  2179. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.TargetCode.Next);
  2180. ELSIF yyyIsEqual ('Results') THEN QueryTree (yyt^.TargetCode.Results);
  2181. ELSIF yyyIsEqual ('Code') THEN QueryTree (yyt^.TargetCode.Code);
  2182. END;
  2183. | Order: IF FALSE THEN
  2184. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Order.Next);
  2185. ELSIF yyyIsEqual ('Results') THEN QueryTree (yyt^.Order.Results);
  2186. ELSIF yyyIsEqual ('Arguments') THEN QueryTree (yyt^.Order.Arguments);
  2187. END;
  2188. | Check: IF FALSE THEN
  2189. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Check.Next);
  2190. ELSIF yyyIsEqual ('Condition') THEN QueryTree (yyt^.Check.Condition);
  2191. ELSIF yyyIsEqual ('Statement') THEN QueryTree (yyt^.Check.Statement);
  2192. ELSIF yyyIsEqual ('Actions') THEN QueryTree (yyt^.Check.Actions);
  2193. ELSIF yyyIsEqual ('Results') THEN QueryTree (yyt^.Check.Results);
  2194. END;
  2195. | Module: IF FALSE THEN
  2196. ELSIF yyyIsEqual ('ParserCodes') THEN QueryTree (yyt^.Module.ParserCodes);
  2197. ELSIF yyyIsEqual ('TreeCodes') THEN QueryTree (yyt^.Module.TreeCodes);
  2198. ELSIF yyyIsEqual ('EvalCodes') THEN QueryTree (yyt^.Module.EvalCodes);
  2199. ELSIF yyyIsEqual ('Props') THEN QueryTree (yyt^.Module.Props);
  2200. ELSIF yyyIsEqual ('Decls') THEN QueryTree (yyt^.Module.Decls);
  2201. ELSIF yyyIsEqual ('Classes') THEN QueryTree (yyt^.Module.Classes);
  2202. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Module.Next);
  2203. END;
  2204. | Prop: IF FALSE THEN
  2205. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.Prop.Names);
  2206. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Prop.Next);
  2207. END;
  2208. | Select: IF FALSE THEN
  2209. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.Select.Names);
  2210. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Select.Next);
  2211. END;
  2212. | Decl: IF FALSE THEN
  2213. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.Decl.Names);
  2214. ELSIF yyyIsEqual ('Attributes') THEN QueryTree (yyt^.Decl.Attributes);
  2215. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Decl.Next);
  2216. END;
  2217.      ELSE
  2218.      END;
  2219.     END;
  2220.    END;
  2221.   END;
  2222.  END QueryTree;
  2223.  
  2224. PROCEDURE BeginTree;
  2225.  BEGIN
  2226. (* line 297 "" *)
  2227.  
  2228.    ErrorCount := 0;
  2229.    MakeSet (Options, 127);
  2230.    NoCodeAttr  := {Test, Dummy, Virtual, Parameter};
  2231.    NoCodeClass := {Ignore, Abstract};
  2232.  
  2233. (* line 749 "" *)
  2234.  
  2235.    MakeSet    (DummySet, 0);
  2236.    MakeRelation    (DummyRelation, 0, 0);
  2237.  
  2238.    nNoAction    := mNoAction    (); 
  2239.    nNoAttribute    := mNoAttribute    (); 
  2240.    nNoClass    := mNoClass    (); 
  2241.    nNoDecl    := mNoDecl    (); 
  2242.    nNoDesignator:= mNoDesignator();
  2243.    nNoLayout    := mNoLayout    (); 
  2244.    nNoModule    := mNoModule    (); 
  2245.    nNoName    := mNoName    (); 
  2246.    nNoPrec    := mNoPrec    (); 
  2247.    nNoProp    := mNoProp    (); 
  2248.  
  2249.  END BeginTree;
  2250.  
  2251. PROCEDURE CloseTree;
  2252.  BEGIN
  2253.  END CloseTree;
  2254.  
  2255. PROCEDURE xxExit;
  2256.  BEGIN
  2257.   IO.CloseIO; System.Exit (1);
  2258.  END xxExit;
  2259.  
  2260. BEGIN
  2261.  yyBlockList    := NIL;
  2262.  yyPoolFreePtr    := NIL;
  2263.  yyPoolMaxPtr    := NIL;
  2264.  HeapUsed    := 0;
  2265.  yyExit    := xxExit;
  2266.  yyNodeSize [Classes] := SYSTEM.TSIZE (yClasses);
  2267.  yyNodeSize [NoClass] := SYSTEM.TSIZE (yNoClass);
  2268.  yyNodeSize [Class] := SYSTEM.TSIZE (yClass);
  2269.  yyNodeSize [Attributes] := SYSTEM.TSIZE (yAttributes);
  2270.  yyNodeSize [NoAttribute] := SYSTEM.TSIZE (yNoAttribute);
  2271.  yyNodeSize [AttrOrAction] := SYSTEM.TSIZE (yAttrOrAction);
  2272.  yyNodeSize [Child] := SYSTEM.TSIZE (yChild);
  2273.  yyNodeSize [Attribute] := SYSTEM.TSIZE (yAttribute);
  2274.  yyNodeSize [ActionPart] := SYSTEM.TSIZE (yActionPart);
  2275.  yyNodeSize [Codes] := SYSTEM.TSIZE (yCodes);
  2276.  yyNodeSize [Designators] := SYSTEM.TSIZE (yDesignators);
  2277.  yyNodeSize [NoDesignator] := SYSTEM.TSIZE (yNoDesignator);
  2278.  yyNodeSize [Designator] := SYSTEM.TSIZE (yDesignator);
  2279.  yyNodeSize [Ident] := SYSTEM.TSIZE (yIdent);
  2280.  yyNodeSize [Remote] := SYSTEM.TSIZE (yRemote);
  2281.  yyNodeSize [Any] := SYSTEM.TSIZE (yAny);
  2282.  yyNodeSize [Anys] := SYSTEM.TSIZE (yAnys);
  2283.  yyNodeSize [Layouts] := SYSTEM.TSIZE (yLayouts);
  2284.  yyNodeSize [NoLayout] := SYSTEM.TSIZE (yNoLayout);
  2285.  yyNodeSize [LayoutAny] := SYSTEM.TSIZE (yLayoutAny);
  2286.  yyNodeSize [Names] := SYSTEM.TSIZE (yNames);
  2287.  yyNodeSize [NoName] := SYSTEM.TSIZE (yNoName);
  2288.  yyNodeSize [Name] := SYSTEM.TSIZE (yName);
  2289.  yyNodeSize [Ag] := SYSTEM.TSIZE (yAg);
  2290.  yyNodeSize [Precs] := SYSTEM.TSIZE (yPrecs);
  2291.  yyNodeSize [NoPrec] := SYSTEM.TSIZE (yNoPrec);
  2292.  yyNodeSize [Prec] := SYSTEM.TSIZE (yPrec);
  2293.  yyNodeSize [LeftAssoc] := SYSTEM.TSIZE (yLeftAssoc);
  2294.  yyNodeSize [RightAssoc] := SYSTEM.TSIZE (yRightAssoc);
  2295.  yyNodeSize [NonAssoc] := SYSTEM.TSIZE (yNonAssoc);
  2296.  yyNodeSize [Actions] := SYSTEM.TSIZE (yActions);
  2297.  yyNodeSize [NoAction] := SYSTEM.TSIZE (yNoAction);
  2298.  yyNodeSize [Action] := SYSTEM.TSIZE (yAction);
  2299.  yyNodeSize [Assign] := SYSTEM.TSIZE (yAssign);
  2300.  yyNodeSize [Copy] := SYSTEM.TSIZE (yCopy);
  2301.  yyNodeSize [TargetCode] := SYSTEM.TSIZE (yTargetCode);
  2302.  yyNodeSize [Order] := SYSTEM.TSIZE (yOrder);
  2303.  yyNodeSize [Check] := SYSTEM.TSIZE (yCheck);
  2304.  yyNodeSize [Modules] := SYSTEM.TSIZE (yModules);
  2305.  yyNodeSize [NoModule] := SYSTEM.TSIZE (yNoModule);
  2306.  yyNodeSize [Module] := SYSTEM.TSIZE (yModule);
  2307.  yyNodeSize [Props] := SYSTEM.TSIZE (yProps);
  2308.  yyNodeSize [NoProp] := SYSTEM.TSIZE (yNoProp);
  2309.  yyNodeSize [Prop] := SYSTEM.TSIZE (yProp);
  2310.  yyNodeSize [Select] := SYSTEM.TSIZE (ySelect);
  2311.  yyNodeSize [Decls] := SYSTEM.TSIZE (yDecls);
  2312.  yyNodeSize [NoDecl] := SYSTEM.TSIZE (yNoDecl);
  2313.  yyNodeSize [Decl] := SYSTEM.TSIZE (yDecl);
  2314.  yyMaxSize    := 0;
  2315.  FOR yyi := 1 TO 129 DO
  2316.   yyNodeSize [yyi] := LONGINT (BITSET (yyNodeSize [yyi] + CARDINAL (General.MaxAlign) - 1) * General.AlignMasks [General.MaxAlign]);
  2317.   yyMaxSize := General.Max (yyNodeSize [yyi], yyMaxSize);
  2318.  END;
  2319.  yyTypeRange [Classes] := Class;
  2320.  yyTypeRange [NoClass] := NoClass;
  2321.  yyTypeRange [Class] := Class;
  2322.  yyTypeRange [Attributes] := ActionPart;
  2323.  yyTypeRange [NoAttribute] := NoAttribute;
  2324.  yyTypeRange [AttrOrAction] := ActionPart;
  2325.  yyTypeRange [Child] := Child;
  2326.  yyTypeRange [Attribute] := Attribute;
  2327.  yyTypeRange [ActionPart] := ActionPart;
  2328.  yyTypeRange [Codes] := Codes;
  2329.  yyTypeRange [Designators] := Anys;
  2330.  yyTypeRange [NoDesignator] := NoDesignator;
  2331.  yyTypeRange [Designator] := Designator;
  2332.  yyTypeRange [Ident] := Ident;
  2333.  yyTypeRange [Remote] := Remote;
  2334.  yyTypeRange [Any] := Any;
  2335.  yyTypeRange [Anys] := Anys;
  2336.  yyTypeRange [Layouts] := LayoutAny;
  2337.  yyTypeRange [NoLayout] := NoLayout;
  2338.  yyTypeRange [LayoutAny] := LayoutAny;
  2339.  yyTypeRange [Names] := Name;
  2340.  yyTypeRange [NoName] := NoName;
  2341.  yyTypeRange [Name] := Name;
  2342.  yyTypeRange [Ag] := Ag;
  2343.  yyTypeRange [Precs] := NonAssoc;
  2344.  yyTypeRange [NoPrec] := NoPrec;
  2345.  yyTypeRange [Prec] := NonAssoc;
  2346.  yyTypeRange [LeftAssoc] := LeftAssoc;
  2347.  yyTypeRange [RightAssoc] := RightAssoc;
  2348.  yyTypeRange [NonAssoc] := NonAssoc;
  2349.  yyTypeRange [Actions] := Check;
  2350.  yyTypeRange [NoAction] := NoAction;
  2351.  yyTypeRange [Action] := Check;
  2352.  yyTypeRange [Assign] := Assign;
  2353.  yyTypeRange [Copy] := Copy;
  2354.  yyTypeRange [TargetCode] := TargetCode;
  2355.  yyTypeRange [Order] := Order;
  2356.  yyTypeRange [Check] := Check;
  2357.  yyTypeRange [Modules] := Module;
  2358.  yyTypeRange [NoModule] := NoModule;
  2359.  yyTypeRange [Module] := Module;
  2360.  yyTypeRange [Props] := Select;
  2361.  yyTypeRange [NoProp] := NoProp;
  2362.  yyTypeRange [Prop] := Prop;
  2363.  yyTypeRange [Select] := Select;
  2364.  yyTypeRange [Decls] := Decl;
  2365.  yyTypeRange [NoDecl] := NoDecl;
  2366.  yyTypeRange [Decl] := Decl;
  2367.  BeginTree;
  2368. END Tree.
  2369.